{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Enviroment: \n",
    "Open AI gym [CartPole v0](https://github.com/openai/gym/wiki/CartPole-v0)\n",
    "\n",
    "\n",
    "\n",
    "### Observation\n",
    "\n",
    "Type: Box(4)\n",
    "\n",
    "| Num  | Observation          | Min      | Max     |\n",
    "| ---- | -------------------- | -------- | ------- |\n",
    "| 0    | Cart Position        | -2.4     | 2.4     |\n",
    "| 1    | Cart Velocity        | -Inf     | Inf     |\n",
    "| 2    | Pole Angle           | ~ -41.8° | ~ 41.8° |\n",
    "| 3    | Pole Velocity At Tip | -Inf     | Inf     |\n",
    "\n",
    "### Actions\n",
    "\n",
    "Type: Discrete(2)\n",
    "\n",
    "| Num  | Action                 |\n",
    "| ---- | ---------------------- |\n",
    "| 0    | Push cart to the left  |\n",
    "| 1    | Push cart to the right |\n",
    "\n",
    "Note: The amount the velocity is reduced or increased is not fixed as it depends on the angle the pole is pointing. This is because the center of gravity of the pole increases the amount of energy needed to move the cart underneath it\n",
    "\n",
    "### Reward\n",
    "\n",
    "Reward is 1 for every step taken, including the termination step\n",
    "\n",
    "### Starting State\n",
    "\n",
    "All observations are assigned a uniform random value between ±0.05\n",
    "\n",
    "### Episode Termination\n",
    "\n",
    "1. Pole Angle is more than ±12°\n",
    "2. Cart Position is more than ±2.4 (center of the cart reaches the edge of the display)\n",
    "3. Episode length is greater than 200\n",
    "\n",
    "### Solved Requirements\n",
    "\n",
    "Considered solved when the average reward is greater than or equal to 195.0 over 100 consecutive trials\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. gym enviroment setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.04015025, -0.0001921 ,  0.00938707,  0.0064158 ])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import gym\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "env = gym.make(\"CartPole-v0\")\n",
    "env.reset()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Q Table and E trace setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "LEARNING_RATE = 0.5\n",
    "DISCOUNT = 0.95\n",
    "EPISODES = 500\n",
    "SHOW_EVERY = 10\n",
    "Q_TABLE_LEN = 50\n",
    "LAMBDA = 0.95"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sigmoid(x):\n",
    "  return 1 / (1 + np.exp(-x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/hongtao/anaconda3/envs/spinningup/lib/python3.6/site-packages/ipykernel_launcher.py:2: RuntimeWarning: overflow encountered in exp\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "DISCRETE_OS_SIZE = [Q_TABLE_LEN] * (len(env.observation_space.high))\n",
    "\n",
    "\n",
    "observation_high = np.array([env.observation_space.high[0],\n",
    "                    Q_TABLE_LEN*sigmoid(env.observation_space.high[1]),\n",
    "                    env.observation_space.high[2],\n",
    "                    Q_TABLE_LEN*sigmoid(env.observation_space.high[3])])\n",
    "\n",
    "observation_low = np.array([env.observation_space.low[0],\n",
    "                    Q_TABLE_LEN*sigmoid(env.observation_space.low[1]),\n",
    "                    env.observation_space.low[2],\n",
    "                    Q_TABLE_LEN*sigmoid(env.observation_space.low[3])])\n",
    "\n",
    "discrete_os_win_size = (observation_high - observation_low) / DISCRETE_OS_SIZE\n",
    "\n",
    "# q_table = np.random.uniform(low=0, high=1,\n",
    "#                             size=(DISCRETE_OS_SIZE + [env.action_space.n]))\n",
    "\n",
    "q_table = np.zeros((DISCRETE_OS_SIZE + [env.action_space.n]))\n",
    "e_trace = np.zeros((DISCRETE_OS_SIZE + [env.action_space.n]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(50, 50, 50, 50, 2)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q_table.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Decay epsilon "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "epsilon = 1  # not a constant, qoing to be decayed\n",
    "START_EPSILON_DECAYING = 1\n",
    "END_EPSILON_DECAYING = EPISODES//2\n",
    "epsilon_decay_value = epsilon/(END_EPSILON_DECAYING - START_EPSILON_DECAYING)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Help functions "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_discrete_state (state):\n",
    "    discrete_state = (state - observation_low) // discrete_os_win_size\n",
    "    return tuple(discrete_state.astype(int))\n",
    "\n",
    "def take_epilon_greedy_action(state, epsilon):\n",
    "    discrete_state = get_discrete_state(state)\n",
    "    if np.random.random() < epsilon:\n",
    "        action = np.random.randint(0,env.action_space.n)\n",
    "    else:\n",
    "        action = np.argmax(q_table[discrete_state])\n",
    "    return action"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Rewards Recorder setup "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "ep_rewards = []\n",
    "aggr_ep_rewards = {'ep':[],'avg':[],'min':[],'max':[]}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Train the Agent "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "episode: 0\n",
      "episode: 10\n",
      "episode: 20\n",
      "episode: 30\n",
      "episode: 40\n",
      "episode: 50\n",
      "episode: 60\n",
      "episode: 70\n",
      "episode: 80\n",
      "episode: 90\n",
      "episode: 100\n",
      "episode: 110\n",
      "episode: 120\n",
      "episode: 130\n",
      "episode: 140\n",
      "episode: 150\n",
      "episode: 160\n",
      "episode: 170\n",
      "episode: 180\n",
      "episode: 190\n",
      "episode: 200\n",
      "episode: 210\n",
      "episode: 220\n",
      "episode: 230\n",
      "episode: 240\n",
      "episode: 250\n",
      "episode: 260\n",
      "episode: 270\n",
      "episode: 280\n",
      "episode: 290\n",
      "episode: 300\n",
      "episode: 310\n",
      "episode: 320\n",
      "episode: 330\n",
      "episode: 340\n",
      "episode: 350\n",
      "episode: 360\n",
      "episode: 370\n",
      "episode: 380\n",
      "episode: 390\n",
      "episode: 400\n",
      "episode: 410\n",
      "episode: 420\n",
      "episode: 430\n",
      "episode: 440\n",
      "episode: 450\n",
      "episode: 460\n",
      "episode: 470\n",
      "episode: 480\n",
      "episode: 490\n"
     ]
    }
   ],
   "source": [
    "for episode in range(EPISODES):\n",
    "    # initiate reward every episode\n",
    "    ep_reward = 0\n",
    "    if episode % SHOW_EVERY == 0:\n",
    "        print(\"episode: {}\".format(episode))\n",
    "        render = True\n",
    "    else:\n",
    "        render = False\n",
    "\n",
    "    state = env.reset()d\n",
    "    #   reset e_trace IMPORTANT\n",
    "    e_trace = np.zeros(DISCRETE_OS_SIZE + [env.action_space.n])\n",
    "    \n",
    "    action = take_epilon_greedy_action(state, epsilon)\n",
    "    done = False\n",
    "\n",
    "    while not done:\n",
    "\n",
    "        next_state, reward, done, _ = env.step(action)\n",
    "\n",
    "        ep_reward += reward\n",
    "        \n",
    "        next_action = take_epilon_greedy_action(state, epsilon)\n",
    "\n",
    "        # if render:\n",
    "        #     env.render()\n",
    "\n",
    "        if not done:\n",
    "\n",
    "            delta = reward + DISCOUNT * q_table[get_discrete_state(next_state)][next_action] - q_table[get_discrete_state(state)][action]\n",
    "\n",
    "            e_trace[get_discrete_state(state)][action] += 1\n",
    "            \n",
    "            q_table += LEARNING_RATE * delta * e_trace\n",
    "            \n",
    "            e_trace = DISCOUNT * LAMBDA * e_trace\n",
    "\n",
    "\n",
    "        state = next_state\n",
    "        action = next_action\n",
    "\n",
    "    # Decaying is being done every episode if episode number is within decaying range\n",
    "    if END_EPSILON_DECAYING >= episode >= START_EPSILON_DECAYING:\n",
    "        epsilon -= epsilon_decay_value\n",
    "\n",
    "    # recoard aggrated rewards on each epsoide\n",
    "    ep_rewards.append(ep_reward)\n",
    "\n",
    "    # every SHOW_EVERY calculate average rewords\n",
    "    if episode % SHOW_EVERY == 0:\n",
    "        avg_reward = sum(ep_rewards[-SHOW_EVERY:]) / len(ep_rewards[-SHOW_EVERY:])\n",
    "        aggr_ep_rewards['ep'].append(episode)\n",
    "        aggr_ep_rewards['avg'].append(avg_reward)\n",
    "        aggr_ep_rewards['min'].append(min(ep_rewards[-SHOW_EVERY:]))\n",
    "        aggr_ep_rewards['max'].append(max(ep_rewards[-SHOW_EVERY:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Rewards')"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOy9eXycZbn//74nM5lMlsmeJm2a7i10paWlpQUpFGQRCwicA4cjlIOiB0U4Kpv+VI7KUTmoXxHFA9KDqHAQKrKD7JvQUko3ui9pkzRp0iyTzGQy6/37Y+aeTiazPLNm4Xm/XvPK5JlnuZM2z/Vc2+cSUkp0dHR0dHQADMO9AB0dHR2dkYNuFHR0dHR0QuhGQUdHR0cnhG4UdHR0dHRC6EZBR0dHRyeEcbgXkA5VVVVy8uTJw70MHR0dnVHFRx99dExKWR3ts1FtFCZPnszGjRuHexk6Ojo6owohxKFYn+nhIx0dHR2dELpR0NHR0dEJoRsFHR0dHZ0QozqnEA2Px0NzczMDAwPDvZSsUVBQQH19PSaTabiXoqOjM8YYc0ahubmZkpISJk+ejBBiuJeTcaSUdHZ20tzczJQpU4Z7OTo6OmOMrIWPhBAThRBvCCF2CCE+EULcFNxeIYR4RQixN/i1PLhdCCHuFULsE0JsFUIsSuW6AwMDVFZWjkmDACCEoLKyckx7Qjo6OsNHNnMKXuBbUsrZwDLga0KI2cDtwGtSyhnAa8HvAc4HZgRf1wP3p3rhsWoQFGP959PR0Rk+smYUpJStUspNwfd9wE5gAnAR8Ifgbn8ALg6+vwh4RAb4ACgTQtRla306OmOJZ/c/S/dAd9rn6Rro4sWDL2ZgRfBx+8fs7tqdkXMNF1JK/rr3rxxzHhvupeSMnFQfCSEmAwuB9cA4KWVr8KM2YFzw/QSgKeyw5uC2yHNdL4TYKITY2NHRkbU16+iMFroGuvjOu9/hd1t+l/a5nt3/LLe+fSsHbQfTPtePP/gxv9r0q7TPM5wccRzhB//4ATe8egP9nv7hXk5OyLpREEIUA+uAm6WUveGfycCEn6Sm/EgpH5BSLpZSLq6ujtqlraPzqcLmsgHw/MHncfvcaZ2r1x34E13fuj4j61JrG630DPQAsLNrJ7e9fRs+vy+n1/9Hyz/oc/fl9JpZNQpCCBMBg/BnKeVfg5uPqrBQ8Gt7cHsLMDHs8PrgtlHJxRdfzMknn8ycOXN44IEH+N3vfsctt9wS+vzhhx/m61//OgA/+tGPmDVrFqeddhpXXnkl99xzz3AtW2cUom4aNpeNt5vfTutcDo8DgA1tGzKyLmVkRis2d8CoXTDlAt5sfpN7Nubub9PmsvHVV7/KX/f+NfHOGSRrJakikA19CNgppfxF2EfPANcAPw1+fTps+9eFEP8HLAVsYWGmlPjPZz9hx5HM/qecPd7KDz4/J+F+a9eupaKiAqfTyZIlS3jttddYsWIF//3f/w3A448/zne/+10+/PBD1q1bx5YtW/B4PCxatIiTTz45o2vWGdsooyAQPL3vac6edHbK57K77UDAKPilH4NI7bnR6/fS7+0f9Uah1xVY/5fnfZmKggr+tPNPNFgbuPKEK7N+7WPOY0gkR/uPZv1a4WTTU1gBfBE4SwixOfi6gIAxOEcIsRc4O/g9wAvAAWAf8CBwQxbXlnXuvfdeFixYwLJly2hqauLgwYNMnTqVDz74gM7OTnbt2sWKFSt47733uOiiiygoKKCkpITPf/7zw710nVGGMgpnTDyDd1reSSspqjwFm8vGrq5daZ+n19XLaJ4Dr4xaqbmUby/+NivrV/LTDT9N2yPTQqezc9DXXJE1T0FK+S4Qq3ZyVZT9JfC1TK5ByxN9NnjzzTd59dVXef/99yksLGTlypUMDAxwxRVX8Je//IUTTjiBSy65RC8t1ckI6sb1xRO/yJtNb/L8gee5Zs41KZ3L4XEwoXgCLfYW1reuZ3bl7LTW5JVenF4nhabClM4z3Kifw2q2kmfI42ef+RlrXlrDLW/dwiPnP8KsillZu3bXQBeQe6Ogax9lAZvNRnl5OYWFhezatYsPPvgAgEsuuYSnn36axx57jCuuuAKAFStW8OyzzzIwMIDdbue5554bzqXrjEKUpzC/ej7zq+fzt31/S/np3OFxMNk6mamlU9NKNqswFDCqQ0g2l42CvALMeWYACk2F3LfqPkryS7jhtRtoc7Rl7dqdA52DvuYK3ShkgfPOOw+v18uJJ57I7bffzrJlywAoLy/nxBNP5NChQ5xyyikALFmyhNWrVzN//nzOP/985s2bR2lp6XAuX2eU0efuw2QwYc4zc9G0i9jXs48dXTtSOpfdY6fIVMTSuqVsat+Ex+dJeU2K0WwUet29WPOtg7bVFNbwm1W/we62c9HfLuJXm36VkR6RSIYrfKQbhSxgNpt58cUX2blzJ3/729948803WblyJQDPPfccBw4cGLT/t7/9bfbs2cPLL7/MoUOH9ESzTlL0ufsoyS9BCMF5U84j35DP0/ueTnxgFOweO8X5xSytW4rT62Trsa0pr0mhkrWjEZvLhtVsHbJ9VsUsHrvwMc6oP4OHtj3EeevOy7hxUOGjHlcPHn9qxjkVdKMwArj++us56aSTWLRoEZdeeimLFqUk+6TzKaXP3Rd6mrXmW1nVsIoXDr6QUs+Cw+OgyFTE4nGLMQhDyiGkPs/Y9RQUU0uncvcZd/PURU+FjMO5687l/330/0L9DemgPASJzIonEgvdKIwAHn30UTZv3syuXbu44447hns5OqOMXk8vJfkloe8vmn4RNpeNt5rfSuo8funH4XFQbCqm1FzKiRUnpm4Uxkj4KJanEM60smkh47CyfiVrt6/l9nduj3uMFpSnALkNIelGQUdnlKPCR4pldcuosdQkHUJSMg5FpiIAltYtZWvH1pTkHcZK+KjX3UtpvrYcnzIOF0y9gMbexrSv3TnQSX1xfeh9rtCNgo7OKCfSKOQZ8vj8tM/zbsu7SfUs2D2BiqFiUzEQMApe6eWjox+ltCaL0YJAJOUpOL1OHB7HkNeAd3ik4rV4CpGU5pem7R1JKel0djKzfCZATgX5xtyQHR2dTxuRRgFg9fTVPLT9oaR6FlTDWVF+wFNYWLMQk8HE+tb1nF5/etJrKjWXYhRGzTfI91re499f/XdkFDm0PJHH/573vyysWZjUOtLB4/Pg9Do1ewqKkvwS7G57Wh3hTq+TAd8Asypm8XrT6zkNH+lGQUdnlBPNKEwtnRrqWbh69tWaGiUjPQWL0cJJNSelpIOk1pQn8jQLuu3r2YdEctOimzAZjo+atXvs/G7L7zjQcyCnRkHpHiXrKVjzrUgkdo89ZpI6EcoITCiegMVo0cNHnwaeeeYZfvrTnybeUUcnDi6fC5fPFfXmk2zPgsMd8BSUUQA4pfYUdnXtSrqaxu6xU2IqwZpv1ewp9Lh6MAoj1829jmvmXBN6XTvn2tDnuSQkcZGCpwDp5VKUEagoqKCyoDKn4SPdKAwTq1ev5vbb069Q0Pl0o57CS0wlQz5TPQvPH3he07mUp6ASzRBIWktk0t6C8hSs+VbNN8fugW7KCsqGeDUWo4V8Q37OZbjVupP2FIL7pyN5rYxCpaWSKksVXc6uBEdkDt0oZIHGxkZOOOEE1qxZw8yZM7nqqqt49dVXWbFiBTNmzGDDhg2DpLPXrFnDN77xDZYvX87UqVN58sknh/kn0BktqKfZyPARBMIYk0on0dKnTYFe5RTCPYU5VXMoNBYmXZra6w6UyVrNyXkKZeayIduFEJSZy0aNp6C8tnSSzSp8VFFQQaWlMqfho7GdU3jxdmjbltlz1s6D8xOHffbt28cTTzzB2rVrWbJkCY8++ijvvvsuzzzzDP/1X//FxRdfPGj/1tZW3n33XXbt2sXq1au57LLLMrtunTFJyFOIYhQg4EGEN5LFI+Qp5B/3FEwGE4trF7O+LTmjYPfYKTYVY84zp20UAEoLSnNuFJRnkkpOAdLzFFSPQmVBJZUFlWw6uinlcyWL7ilkiSlTpjBv3jwMBgNz5sxh1apVCCGYN28ejY2NQ/a/+OKLMRgMzJ49m6NHc6ufrjN6SWQUrGbt4ZuQUTAWDdq+tHYph3oPaRZ/k1KmFD7qGeihvKA86mdl5rLch4+G2VOw5lsx5ZmoslTR7erOmdTF2PYUNDzRZwuz2Rx6bzAYQt8bDAa8Xm/c/Uez/rxOblFGIVaVizXfyh73Hk3ncrgdWIwW8gx5g7YvrVsKBEZ0XjT9ooTn6ff245d+rPlWvNKL2+9mwDtAgbEg7nHdrm5KzdFvwGXmMvb37Nf0c2QKZcxiGdxYqP3T9RQqCiqAQF4BAjmXmsKalM+pFd1T0NEZxST0FPKtmm9OKuQTyYzyGZSbyzXnFdT1ivOLNT81SymxuWyUm6N7CqXmYQgfuW0Um4qHGMlEFJmKMAhDWp5N50BnyBhUFgS+5qpXQTcKOjqjmHiJZrW9z9OnaeC8EsOLxCAMnFJ3Cutb12vyYsMNldan5j5PHz7pi5lTKDOX5XyKW6+rN6bnEg8hROD3nk71kbNziKeQq7LUbM5oXgtcCLRLKecGtz0OqFFFZUCPlPIkIcRkYCewO/jZB1LKr2Zrbdlm8uTJbN++PfT9ww8/HPWzNWvWDPkcwG63o6OjhfBZCtFQN2W7x57wBhfLU4BACOnlxpc52HuQqaVTE65JXVvdxBN5CqoPIl5OwSu9gf6HJMM5qWJz21JuPkumPyMaXQNdIQ9BGYVcVSBlM6fwMHAf8IjaIKX8Z/VeCPFzINy/2i+lPCmL69HRGXOEz1KIRnglTCKj4PA4BlUehaPGcjbaGhMaBZWwDu+dSJRs7nYFpKFjrVFt73H15Mwo9Lp6k648UqTjKXh8HnrdvWMvfCSlfBuI2nEhAv+D/wl4LFvX19H5NBA+SyEaoe5aDU+t8TyFCnMglKFF1z88pKVuqomur+LvsXIKKqyUywqk4fIUVDmqCh8VmgpzKnUxXDmF04GjUsq9YdumCCE+FkK8JYSIqb4lhLheCLFRCLGxo6Mj+yvV0RnBRNM9CieZShiHO3pOAaCsIHBTVk/0idakrq010ayMjbrOkOsHjUIuk82p5hQgPU8hvJtZkUupi+EyClcy2EtoBRqklAuBbwKPCiGimmgp5QNSysVSysXV1dU5WKqOzsglkVFIppEqnqdgMVqwGC2aPAW7Oxg+Cks0JwofqZt9zOa1sPBRLpBSDpunoMJEKmwE5FTqIudGQQhhBL4APK62SSldUsrO4PuPgP3AzFyvTUdntKHkJGKRTElorOojRbm5XNNNuc/dhznPTH5ePkaDkSJTUeJEc1AML5ZRynX4yOl14vV7U/YUkmnaiyS8m1mRS6mL4fAUzgZ2SSmb1QYhRLUQIi/4fiowAzgQ43gdHZ0gmQofDfgG8EkfxfnRb8oQCO2Ej4iMRaSh0vLUHEsML/wckDtPQa03ZU/BbMXtd+PyuZI+dsyGj4QQjwHvA7OEEM1CiOuCH13B0ATzZ4CtQojNwJPAV6WUuZMF1NEZpSQyCqqRKtFNOTRgxxjHUygo1yShHRmG0vLUHE/3CALT5EryS5KW8E4V5ZGknFMwpS6f3eXsoiCvAIvREtpWZamix9WTE6mLrJWkSimvjLF9TZRt64B12VqLjs5YxOVz4fa74z7NqkaqRDcnlQeIVZIKgfBRo60x4boiK6JK8ks0hY/iGQXIrf5RJjwFCPwuqguTy32qbuZwrymXUhd6R3MW0CKdvWHDBk499VQWLlzI8uXL2b070Lf3y1/+kn/7t38DYNu2bcydO5f+/uQHp+uMfeLNUghHi1KqwztUNjuS8oJyTYnmSO9FS/gonhieIpfy2cqIplN9BKmJ4oV3Myty2aswpgXxfrbhZ+zq2pXRc55QcQK3nXJbwv0SSWc/8sgjvPPOOxiNRl599VW+853vsG7dOm666SZWrlzJU089xV133cX//M//UFhYmNGfQWdskEjiQmE1J9Y/UlPXEiWa+739uHyumB3UEDAK44vHD7p+b2fi5rVEN+BSc2nOGrhCozjTqD6C1IxC10AXdUV1g7blUupiTBuF4URJZwNRpbNtNhvXXHMNe/fuRQiBxxOIFRoMBh5++GHmz5/PV77yFVasWDGcP4bOCCaRGJ5CU/goYj5zNNSTfPdAN7VFtXHXFekpxDNKicTwFGXmMg705Kb+JDR1LUWjkJanMNDJ3Kq5g7blUupiTBsFLU/02SKRdPb3vvc9zjzzTJ566ikaGxtZuXJlaP+9e/dSXFzMkSNHcr1snVGEVqNgzbdyoD/+zTTa1LVI1E07FaPg9Drx+DyY8kxD908ghqfIafjI3UueyIvrOcUj1UE7fumne6B7WMNHek5hmLDZbEyYMAEYLIhns9n4xje+wdtvv01nZ6c+mlMnJolmKSi0xPSjTV2LJOQpxOlqVsnv8DyHSrqqkEwkicTwFKXmUvq9/Xh82a/AsbkCjWuxSmQTEQofJVl9ZHPZ8EnfoHJUOC51kYvwkW4Uholbb72VO+64g4ULFw4auvMf//EffO1rX2PmzJk89NBD3H777bS3tw/jSnVGKsmEjxLmFDR4CiGpizjJ5mhrShRfTySGF7q+amCLYVwySa87dYkLAFOeCYvRkrSnED6bOZLKgtw0sI3p8NFwoVU6e8+e4xOxfvzjHwOwdu3a0LaJEyeyb9++LK9WZ7SiNdFckl/CgG8At89Nfl5+1H3sbjsmgynm53BcFC9eCCeuUYjx1JxIDE8R0j8a6KHKUhV333RRnkI6lJgSl+JGEq2bWZErqQvdU9DRGaUkmqWg0FIJE0/3KHQesxWDMMTtag7XPQo/Tq03GonE8BS51D/qdacum63QUvUVSbRuZkWupC50o6CjM0pJNEtBoUXqIpHuEQQmsJWZy+J2FUfzFBJV4iQSw1PkUv8oI56Chqa9SCJls8PJldTFmDQKY33w/Vj/+XS0kWiWgkKLUbB77HF1jxRl5rK4ieZeTzCkZdKeU0gkhhd+bbV/tkk3pwDJzcdWdDo7yRN5Ua+dK6mLMWcUCgoK6OzsHLM3TiklnZ2dFBQUDPdSdIaZRLpHCi3hIy2eAiTualbho3ADU5ofuMHFyikkEsMLnSdH4SO/9Gs2uPFIxVPoHOikvKAcgxh6aw6XusgmYy7RXF9fT3NzM2N5AE9BQQH19fXDvQydYSZZoxDXU3DbNWnqlJvLOWg7GHdN4deE45U48TyFRKEjCMx0yDfkZz181OfuQyIz4ikkHT5ydkVNMsPx5PMx57Gs6h+NOaNgMpmYMmXKcC9DRyfr9Lp7qSuuS7hfpnIKEPAUNrVvivl5n7uPPJE3SOFTrSFmSepAtyajIITISQNbut3MCqvZit1txy/9UZ/8o6HE8KIR6mrOcgPbmAsf6eh8WtDsKWiYk6yl+giOK5X6pT/mmorzi4eEguLJZ9tctoSNa4rSgtLsG4U0FVIVJaYSJDLUGKiFroGuqElmyJ3UhW4UdHRGKVqNgjnPTL4hP3FOIU43s6KioAKf9MX0Ovo8fVFVW+OFUrSI4SlyIZ+d7iwFRcgYa+xqllLS6exMGD7SPQUdHZ0haJmlEE68rmaPz4PL59LmKQR7CWL1KsQyVLFq9rWK4YWun4vwUaY8hSRF8fq9/Qz4BqiwRPcUciV1oRsFHZ1RiNZZCgqrOXb4JjR1TUNOIVFXs91tj24UYngKWsXwFKXm7IePMuYpJCmKp7qVY3kK6rNRGz4SQqwVQrQLIbaHbbtTCNEihNgcfF0Q9tkdQoh9QojdQohzs7UuHZ2xgFaJC0U8T0GLbLYikacQOZ9ZEcsoaBXDC13fXEavqzerJechTyHdjuYkZyrE62ZW5ELqIpuewsPAeVG2/1JKeVLw9QKAEGI2gdnNc4LH/FYIkZfFtenojGq0iuEp4hkFLWJ4CpUEjdXVHDN8lG/F4XHg9XsHbdcqhqcoM5fhld6kkrfJ0uvupSCvIKF8SCKS9RSUUYiVaIaAwRi14SMp5duAVpN2EfB/UkqXlPIgsA84JVtr09EZ7SRrFOIlerXIZitUmCdWV3OsKqZY+kdaxfAUWhvY1u1Zx192/0XTOSPJhMQFhOUUNCaaVQJ5zIaP4vB1IcTWYHhJ/U+YADSF7dMc3DYEIcT1QoiNQoiNY7lBTUcnHlpnKSjiSS4k4ykUGAuwGC1Ru2q9fi8OjyPqmmKFUrSK4Sm06h/9aeefeHDbg5rOGUkmxPAgkKMxCEPS4aN4nkIupC5ybRTuB6YBJwGtwM+TPYGU8gEp5WIp5eLq6upMr09HZ1SQSvio1x09Fq+kKbROGSs3R5e6UMYlVvgIhj41axXDU2jRP5JS0mJvoc3RxlHHUU3nDSdTnoIQIimpiy5nF9Z8a9TpdIpcSF3k1ChIKY9KKX1SSj/wIMdDRC3AxLBd64PbdHR0opBsotmab8UnfTi9ziGfJZNohqD+UZTwkTJU0YT1YjXQdQ90axLDU2gJHx1zHgv9nFs6tmg6bziZEMNTJCOKF6+bWREudZEtcmoUhBDhPfmXAKoy6RngCiGEWQgxBZgBbMjl2nR0RhNaZyko4tXMJ1OSCoFQT7Qn1XjeS6zwUY+rR5MYXujaGsJHTX3HI9GpGIVMeQqQnChep7MzbugIciN1kTXtIyHEY8BKoEoI0Qz8AFgphDgJkEAj8BUAKeUnQoi/ADsAL/A1KaUvW2vT0RntaJ2loAg3CrVFtYM+s3vsGIRhiF5RLCrMFTTaGqOuCaLnOWJV4mgVwws/j0DE9RSUUai2VI8qT6FroIuZ5TPj7pMLqYusGQUp5ZVRNj8UZ/+7gLuytR4dnbFEstLO8cojlRie5qf1grKofQp9nmD4KE71UbTwUTJGIc+QR0l+SdxBP019TRiEgXMnn8vjux+PO4Y0Eo/Pg9PrzKincLRfW16jc0CDpzDWwkc6OjqZQavukSKeUbC7tYnhKSoKKnB6nQx4B4asCaKHj0L6SxGJ5mTE8BSJ9I+a+pqoK6rj5HEn4/F72Nm1U/O5be7AeTNRfQTaPQWPz0Ofuy9hTkFJXWQzfKQbBR2dUUiqRiFafLvf2685nwCxK4ASVURZzUN7JZIRwwu/frzwUXNfM/Ul9cyvng/AlnbtISRltNRgoHSJpw4bjpZuZkW2exV0o6CjMwqJJScRi3gzFexue1JGQT3ZRyabQ1PXYngdkQ10yYrhKRLpHzX1NTGxZCI1hTXUFdUllVfIlMSFwmq24va7cflccffT0qOgyLbUhW4UdHRGIcl6CqpMNFb1UTLhI3UTjzQKve5eikxF5BmiK9REPjUnK4aniBc+srvtdLu6mVgSqHBfUL0gKaMQEsPLkKegBAsTeQtaxPAU2Za60I2Cjs4oJFmjYDQYKTIVRb052T0pegoRvQqJ1hQZPkpWDE8Rz1NQlUfhRuFo/1HaHG2azp0NTwES6x+FwkdajIIePtLR0Qkn2VkKiliieHaPPWrDWSxieQqJprdFho+SFcNTlJpL6ff24/ENlXpQRqG+ODDDfEH1AgC2dmzVdO6MewoaZyqoai4tOYVsS13oRkFHZ5SR7CwFRSyjoHU+s8JqtmIQhqieQjxDFWkUQp5CkjmFeFIXkZ7CCRUnYM4zaw4hJdspngit8tmdzk4sRguFpsKE51SGI1t5Bd0o6OiMMlK9cUVTSvVLf9I5BYMwUGYe2tWsJXykBtlDmO6RRjE8RTyj0GxvptxcHvJ8THkmZlfOTsoolJhKYuZFkkWrp6ClR0ERGsuZpRCSbhR0dEYZyYrhKaJ5Cv2efkC7xIWi3FwetSQ1XhjKmm9FIkNrSFYMT6HCTdGSzaryKJwF1QvY0bkDt8+d8Nw2ly1j+QSILQQYSZezS1M+AbIvdaEbBR2dUUaqRiFaI1WyYniKaF3NfZ6+uCGtyKfmZMXwQteOo3+kehTCWVC9QHMTW6+7N2PdzKB90E5SnkKWpS50o6CjM8pIdpaCIlr4KCSGp2HATjjl5vJBUhNSypjzmcOvD8eNQrJieIpY4SOPz0OrozWqpwDamtgy7SmY8kxYjBZNiWYtSWbIvtSFbhR0dEYZ6YSP7B47Pv9xrclUPYVI+Wyn14lP+rQZBVeYUUgydASx5bOPOI7gl/4hRqG6sJrxReM15RUy7SlA/FGoEMjrdA90a/YUsi11oRsFHZ1RRqqJZrV/+Hxjh1v71LVwlNSEShprWVOkKF6yYngKi9FCviF/SPgosvIoHK1NbDaXLWMKqYp4o1AhYNx80qfZU4Ds9iroRkFHZ5SR7CwFRbTyyNB85iQTzRUFFfilP/TUr8V7ibx+KmJ4EJhoFk3/KK5RqEncxCalzIqnkEgUL5luZsW3F3+bK2ZdkfbaopE16WwdHZ3skOwsBUU0/aNk5jOHo8pIu13dlBWUhYxLMuGjVMTwFKUFQ7uam/qasBgtVFmqhuwfyit0bBkyT0Lh9Drx+r0Z9xQSyWd3OAOz5rWGjwBWTVqV9rpioXsKOjqjjGRnKSii1cyHPIUkE80V5sANTPUqaGmosxgtGA1G+tx9+KU/JTE8RTT9o6a+JiYUT4hqLGeVz0rYxBaSuMixp3DAdgCAKaVTMnrdVNGNgs6o4/0j73P+uvM169mMNZLVPVJEK48MGQVjckYh3FMAbTkFIUQovt7nTk0ML3T9KOGj5r7mqKEj0NbEFpK4yIKnEK9PYXfXbsrN5VE9nOEga0ZBCLFWCNEuhNgetu2/hRC7hBBbhRBPCSHKgtsnCyGcQojNwdfvsrUundHP5vbNNNubufvDu4d7KcNCJo2Cw+3AYrQk3cGrQh3KU1Cy2YnWpYyCugGnklOAoaJ4UsqoPQrhLKhewM7OnTGb2LLmKZit2D3HO7kj2dO9h5kVM5MOB2aLbHoKDwPnRWx7BZgrpZwP7AHuCPtsv5TypODrq1lcl84op9XRCsArh17hH0f+McyryT3JzlJQhMJHrsHho2TzCTC0V0BrmaySz05VDC/8+r2uXqSUQCAuP+AbiOkpwPEmth2dO6J+njVPwVQyqJM7HK/fy76efQlnM+eSrBkFKeXbQFfEtr9LKb3Bb9kshfAAACAASURBVD8AYpt1HZ0YtDpamVU+i4aSBn6y/iea5AuS5aXGl7jt7dsyft5MkKqnUGQqwiAMg3IKyYrhKQqMBViMllBXc5+7LzByM8Es5BJzCb3u3pTF8BRl5jK80hsKf8WrPFKEJ5ujkU1PAaJ3NR/uO4zL52JW+ayMXjMdhjOn8G/Ai2HfTxFCfCyEeEsIcXqsg4QQ1wshNgohNnZ0dGR/lTojjjZHG5Osk7hj6R009jbyyI5HMn6NFw68wAsHX4gqzzzcpGoUhBBDGqlS9RRgcFdzn0fbmlT4KFUxPEVkA5sWo6Ca2GLJaGczpwDRRfH2dO0B+HR4CvEQQnwX8AJ/Dm5qBRqklAuBbwKPCiGimmsp5QNSysVSysXV1dW5WbDOiEFKSaujlbqiOk6bcBpnTTyLB7Y+kPGk857uwB9rNidcpUKqsxQUJaaSoZ5CkpVHivKCcrpcxz0FLcZliFFII9EMx2/kTX1NGISB8UXj4x63oHoBm9s3D+rqVvS6e8kTeRQaE8tXJ0M8/aM93XswCiPTyqZl9JrpoMkoCCGmCSHMwfcrhRDfUEniZBFCrAEuBK6SwYCglNIlpewMvv8I2A+MHNOpM2LodnXj8rmoK64D4NZTbkVKmdGks91tp8XeAhC3vnw4SHWWgsJqtmbMUygrKDvuKWgsk1XlmV0DXSmJ4YWuHZHTaOproq6oDlOeKe5xZ086m3ZnO8/sf2bIZ72uXkrNpRlP+MabqbC7ezeTSycnDLvlEq2ewjrAJ4SYDjwATAQeTfZiQojzgFuB1VLK/rDt1UKIvOD7qcAM4ECy59cZ+6gks2pAmlA8gS/P/3JGk857e/aG3qvGopFCukNgIsNHDndqOQUI9CqEVx9pWVOpuRS/9HPEfiQlMbzw88Bxo9DS1xK38khxzqRzmFs5l/s238eAd2DQZza3LeP5BEjsKYyk0BFoNwr+YIL4EuDXUspbgLp4BwghHgPeB2YJIZqFENcB9wElwCsRpaefAbYKITYDTwJflVJmZ6yQzqimzR4IE9UVHf/vt2bOmowmnXd37Q69b+9vT/t8sXh2/7P8cccfkzomVTE8RaQOT7qeQnifgpaRnuoGeaj3UMqhI4gePoqXT1AIIfjm4m/S3t/On3b+adBnva7MS1xA9KovCKy9zdHGrIqRk2QG7UbBI4S4ErgGeC64La6fJqW8UkpZJ6U0SSnrpZQPSSmnSyknRpaeSinXSSnnBLctklI+m/qPpDOWOeI4Agw2Cvl5+RlNOu/p3kNJfgkmgylrRsHlc3H3h3dz94d3s751vebjMmEU1DmklClXH0GgV8HpdTLgHdCc/FY33cN9h9MyCtZ8KwJBj6sHu9tOt6tbk1EAWFK7hJX1K3lo20ODpsfZ3JmVzVZEq/qC43mr0eopXAucCtwlpTwohJgCJPeIo6OTAVodrViMliE3lPCkc3Nfc1rX2N29m1nls6i2VGfNKLx66FV6XD2U5Jfw/fe+H9IgSkSqsxQU4eGjAd8APunT9IQfjfC4vt2jLXykbroOjyPlxjWAPEMeJfkl9Az0aKo8iuTmk2+m39vPA1sfCG3Llqegqr5iGYWRVI4KGo2ClHKHlPIbUsrHgt8flFL+LLtL09EZSpujjdqi2qix6NtOuQ2jMHLj6zcmnHQVC7/0s7d7LzPLZ1JTWENHf3ZyCk/ueZL64nruO+s+Wh2t/PKjX2o6Ll1PoSS/hAHfAG6fO2UxPIW6qbc52nD5XJqS3+E33XRLP5X+USpGYVrZNC6Zfgn/t/v/Qsfb3JmXzVZEk88eafIWirhGQQixLShJEfWVq0Xq6Cha7a2DQkfhjC8ezy/P/CWNtka+9ea38PiT7zFo7mvG6XUyq2IW1YXVWak+OmA7wMajG7ls5mUsGreIf539rzy++3FNYaR0E83hlTChqWspho9U45m6qWpZU/g+qTauKZT+kbp+fXFyvbA3nHQDRmHk1x//Gp/fh91tz4qnANEH7Yw0eQtFIk/hQuDzwEvB11XB14vAC9ldmo7OUFSPQiyW1i3l+6d+n/db3+euD+4KySBoJdylH1c4LivVR+v2rMMojFw0/SIAblx4I5OskzSFkVKdpaAIl89OdeqaQnkKh/sODzp3PMJvupEhQCklTvfQ/oFYKP2jpr4mys3lSYfBagpruHrO1bx48EXWt61HInPmKYxEeQtFXKMgpTwkpTwEnCOlvFVKuS34ug34bG6WqKMTwOVz0TnQGVMPX3HJjEv40rwvsW7vOh7+5OGkrrG7ezcGYWBa2TSqC6txeBya4/1acPlcPL3/ac5qOCsUNrAYLfxoxY80hZFSnaWgCO+uVVPX0vUUDvdqNwpFpiLyAtXnQ3IKr+5sZ+GP/s6+dnu0Q4egwkfx1FETce2ca6koqOAn638CZF7iQhHpKYxEeQuF1kSzEEKsCPtmeRLH6uhkhKOOQCgnnqeguHHhjZw7+Vx+8dEveOXQK5qvsbtrN5OskygwFlBTWANktiz11UOvYnPZuGzmZYO2L6xZqCmMlOosBUV4zXzIU0gx0Ww1WzEIQ1LhI5V0haE5hW0tNgY8fu57fW+0Q4cQ7ilo6VGIRnF+MV+Z/xUaexujrilTKCFAhZK3GGnlqKD9xv5vwG+FEI1CiEbgt8FtOjo5I1o5aiwMwsCPV/yY+dXzueOdO2Lq3UQS3kxUY8m8UXhizxNMLJnI0rqlQz7TEkZKVfdIEW4UQjmFJGcpKAzCQJm57Hj4SGOXtVpDZE6huTvQz/rMliOavIUycxn93n7a+ttS9hQALp95OQ0lDYPWlmkiB+0oeYuppVOzcr10SGgUhBAGYLqUcgGwAFgQ7CfYlPXV6eiE0WoPdDMriYtEFBgLuPfMe6myVHHj6zeGpCtioeQtlEufaU/hgO0AHx39iEtnXIpBDP3T0xJGStcohDdSpTp1LZxyc3mogUyrx6FuvJFieM1dTmbUFGM25mnyFlROwi/9aRkFU56Jby/+NoXGwrTOEw+r2Yrb7w51UY9EeQtFQqMgpfQTkKZASmmTUtoSHKKjkxXaHG0IBOMKx2k+ptJSyW9X/Ran18mDWx+Mu6+Stwh5Chk2Ck/ueRKjwcjF0y+Ouc/CmoV8cfYXeXz34zy97+khn6c6S0ERknH29KVdkgqDb+xan7LVGiITzU3d/cyrL+Xq5ZM0eQulBcdDPenezM9sOJP3/+V9qguzI7KpvCjlLYxEeQuF1vDRq0KIbwshJgohKtQrqyvT0Ymg1dFKlaUq6aerqWVTWVm/kjea3oiqjqlQ8hYqzltoKqTYVJyRCiSXz8Uz+5/hrIlnUWmpjLvvzSffzNK6pdz5/p182PbhoM/S9RTMeWbyDfkBT8Ftx2QwpfW0qiaw5Yk8LEbLoM9s/R7sLu+QY6z51iFieG6vn7beAerLC7n+9KmavIVwo5KJJ/xo3lumUIZQTZ0bifIWCq2/hX8Gvga8DXwUfG3M1qJ0dKKRqBw1Hmc1nEXXQBebOzbH3EfJW4R7ItWFmelqfuXQK9hcNi6fdXnCfU0GE79Y+QsaShq4+Y2bOWg7GPosXaMAhLpr09E9Uqgbc3F+8ZCKqOv+8CF3/HXbkGMarA1MLp08aP8jPU6khInlFiqLzZq8BXVti9Ey4hrAIgnP5YxUeQuF1o7mKVFeIy9DojOmUd3MqXDahNMwGUy8dvi1mPsoeYvwm1VNYU1GjMKTe55kYslETqk9RdP+1nwrv1n1G4wGIze8egNdA11pz1IInTson52O7pFClZVGJpn9fsm2FhufHBkabf7qgq/y5wv+PGhbUzDJPLEiMMtAi7egjMKE4gkjrgEskvBS4JEqb6HQ7C8JIeYKIf5JCHG1emVzYTo64YQP10mF4vxiltUt4/XDr0dtaFPyFpEufY0lfaNwoCeQYL5s5mVJhSjqS+q596x76XB2cNPrN4UG/qQ6S0ExyFNIsRxVoSqIIr2Xlh4nLq+fpq5+vL7BA+tNBhOFpsGDbJq7nQDUlwdCUFq8BWUcs5UcziThneR7uveMSHkLhdYhOz8Afh18nQncDazO4rp0dAYROVwnFVY1rKLF3hJ6UgtHyVtEuvQ1hTV0ODvwS/+QY7Ty5N5AgvmiaRclfeyC6gXcddpdbO7YzO1v3w6kLnGhUOWRGfUUIta0vyNwI/f4JC09zoTnaerqx2gQ1JUez0sk8hYsRgvl5nJmlM9Idfk5I7zqa3fX7hEpb6HQ+thyGbAKaJNSXkugNDU7XR46OlFQ5aipho8AVk5ciUEYooaQYrn01YXVeP3eQRLLySCl5PkDz3PmxDMTJphjce7kc7lp0U2hfEgmcgp97j7s7vRzCrE8hfCn+4PHEneEN3U7GV9mIc9w/EaZyFsQQvB/F/4fX5r3pVSXnzOUp2Bz2djXs2/Eho5Au1FwBktTvcHZye0Epq/pjHG8fm9KwnKZRk1cSzSDNx6VlkpOqj4pqlEIl7cIRyWdU61AOuI4QtdAF8vqlqV0vOK6udfxhRlfAKDCkl7hn9Lhya6n4CA/L3B7adRgFJq7+5lYYRmyPZG3ML54/JCqp5GIKc+ExWhhe+d2XD7XiE0yg3ajsDE4k/lBApVHmwhMVdMZw0gpufH1GznvyfP45Ngnw7oWZRRSzSkoVjWsYk/3npA0gyJc3iIcVbeeal5B/d5mV85O6XiFEILvLfsea89dy+yK9M6lwkeZqD5SRiHyPPs77MyrL6UoP4/Gzv5ohw6iqctJfVnhkO3h3sKBDm2aSCOVkvwSNh0N9PyO1HJU0F59dIOUskdK+TvgHOCaYBgpLkKItUKIdiHE9rBtFUKIV4QQe4Nfy4PbhRDiXiHEvqA096JUfyidzPDEnid4t+Vd+r39XPPSNbzU+NKwrUUN10lXm+ashrMAeP3w64O2x2omUp5CqkZhR+cOjMKYkbi30WBkSe2StGPRJfkl+KSP7oHutLqZIWAUjMIY6ldQHOiwM726mCnVRQnDR063j2N2V1RPAWDN8sn4Jbyxe2TNy04Wa74Vu8c+YuUtFFoTzX8UQnxZCHGClLJRSql1lsLDwHkR224HXpNSzgBeC34PcD4wI/i6Hrhf4zV0skCLvYWfb/w5y+qW8ewlzzK7cja3vHULv93826TlqOOxoXUDFz51IT/bEH9mU7zhOslQX1LPrPJZg0JIkfIW4ag8QDpGYUb5jJSlrrOBCvVIZNqegjnPzO/P/T3/NOufQtt6+t0cs7uZVlPE5MrERqE5ohw1krpSCzUlZra3jG4xBZVXGKnyFgqt4aO1QB3wayHEASHEOiHETYkOklK+DXRFbL4I+EPw/R+Ai8O2PyIDfACUCSHSixXopISUkh/84wcA/Ofy/6TKUsXvP/t7Vk9bzf1b7ueWt2/B6U1cURKPfk8/P/7gx1z39+s41HuIlxtfjmts4g3XSZZVDavY3L45VOIZKW8RjslgoqKgIiWjIKVkR9eOtENHmSa8zyHdnALAyeNOHuTB7e8IGIFp1cVMqSqiubsftzd29VZkOWo05k0oZdsoNwrKGI/kfAJoDx+9AdwFfI9AXmEx8O8pXnOclLI1+L4NUO2jE4DwQG9zcNsghBDXCyE2CiE2dnSMbndypPLEnidY37qeby3+FuOLA4nd/Lx8frzix3zz5G/y98a/s+alNSEp62TZ0LqBLzzzBf6y+y98cfYXuXXJrXQ4OzjUeyjmMen0KERyVsNZSCRvNL0BDJW3iGRc4biUjMIRxxFsLtuIMwrhSeF0PYVoqHLUadXFTK4swi+PN6dFI9S4Vh7dUwCYO6GU/R12HFFkM7KJ3eXlzHve5LWd6U/gU8Z4JOcTQHv46DXgPQJyF7uBJVLKE9K9uAw8GiYVi5BSPiClXCylXFxdnR3xqk8z4WGjy2cOlmQQQnDt3Gv51Zm/otHWyDUvXZNUZVK4d2A0GHn4vIe5dcmtnD7hdAA+PPph1OO0DtfRyszymdQX14fyCnu692DNt8YU2qsurE6p+ihTSeZME+4pZMso5OcZqC+3MLkq4InEq0Bq6urHbDRQXRI7xDa/vhQp4ZMjvTH3yQb72u0cPObgv17Yic+fXth0THkKwFbADcwF5gNzhRCp1oEdVWGh4Ff1CNbC4DLX+uA2nRwRGTaKFb8/s+FMvrX4W7TYWzR7Cz6/j6teuCrkHTzx+SdYNC5QSzDJOolqS/UQ8TdFm6MNIOS1pIsQglUNq1jfuh67287u7t3MLI/dTJSq1EUmk8yZZFD4KM1EczT2tzuYXFWIMc/A1KBRiJdXaO52MqHcEjdfNG9CIDyV6xBSSzC0tb/DwXNbj6R1LhViG8k9CqA9fPQfUsrPAF8AOoH/BXpSvOYzwDXB99cAT4dtvzpYhbQMsIWFmXRyQLSwUSzUpCt1w05Ee387+3r28a3F3+LWJbcOqi0XQrC4djEb2zZGzStkqhw1nFWTVuHxe3ir+a2o8hbh1Fhq6BrowuNLrl9jJCaZITfho2nVgfOWF+VTajHFNQpN3f1xQ0cANdaCYUk2qyT45MpCfvXa3rS8hdXTVvO9Zd/Lmjx3ptAaPvq6EOJx4GMCCeG1BKqFEh33GIF+hllCiGYhxHXAT4FzhBB7gbOD3wO8ABwA9hHIW9yQ5M+ikwbxwkbRUKEcdcNOhNpvetn0qJ8vqV0SM6+QiW7mSOZXzaeioIJHdjwSVd4iHDVXIZkQ0khNMsPgYTiZSDSH4/L6ONzVHzIKAJOrimjsjBc+csYsRw1nOJLNzd1OSi0mbj3vBA50OHhmS+rBi/qS+kFVWiMVo8b9CoBfAB9JKTVneqSUV8b4aFWUfSUBeW6dYeCuD+4C4oeNwqktDNygj/ZrCx+FnvZjaBctGbcECOQVJpdOHvRZKsN1EpFnyOPMiWeybu86IL5LH97ApjWENVKTzBDodygyFeHwODLuKRzu7Mfnl0yrOW5splQW8mFjdJmQ3gEPNqeH+gSeAgSSza/vbsfh8lJk1nrrSo/m7n7qyy2cN6eWE2pLuPe1fXx+/niMeWN3RL3W8NE9gAn4IoAQoloIMSWbC9PJHb3uXt478h5XnXiV5pteoamQMnNZ6Ck+EcooKGMSSby8QqrDdRKxqiHwbBJN3iKcVBrYRmqSWaFCSJn2FFTl0fTq4yGqyVVFHLE5GfAMHXDU3BWI2ScKH8HwJJtbepzUl1swGAQ3nz2Tg8ccPL05vdzCSCcZldTbgDuCm0zAn7K1KJ3c8vHRj/FLf9L6PLVFtbT1a8sptNpbKTOXDZFMVsTLK2SyHDWcpXVLKTIVRZW3CEd5CsmEj0ZqkllRkl+CQRgyrhukehSmVod5ClVFSAmHu4aWpR6fo6AtfAS5SzZLKQNJ8KD8xrlzxjG7zsqvX987RA58LKHVB7qEgFS2A0BKeQRIT6pRZ8TwYduHmAwm5lfPT+q42qLapHIKiW7ssfIKrY7WjOYTFPl5+dy48Eaunh1/NEi5uRyjwag5VAYjN8mssOZbKTIVZVy+eX+7nbrSgkHhnSnBCqQDHUPzCscb1xJ7CrlONnf3e+h3+0JNdUIIbj57Bo2d/Tz18dgtjNRqFNzhPQVCiMzXsekMGx8e/ZD51fPjPi1Ho7awVnP1kZYbe3heQSGlpNXemrFy1EiuOvEqLpt5Wdx9hBDUWGro6NfmKYzkJLOiJL8k65VHilCvQpRkc1NXP0X5eZQXmjSdP5fJZlV5FN5pfc7sccydYOXXr+/DM0a9Ba1G4S9CiP8hID3xZeBV4PfZW5ZOruh197KraxdLapckfWxdcV1Ilz8RbY62hJ5CtLxC10AXbr87K55CMtQUajcKIznJrDhn0jlcOPXCjJ5TSsn+DgfTqgc/M1oLTFQW5UdtYAtIZhdq9lhUZ7M9B53NqkdhQvng8umbV83kcFc/T20am95CMonmJ4F1wCzg+1LKe7O5sNFO10AXv9/2+6Rr23ONyieop/RkUEnjRN6CkmlOZBSi5RXUubORU0iG6sJqzeGjXCeZvT4/P3x2B/va+zQfs3raar6x6BsZXUd7nwu7y8u0mqEeyOSq6MJ4zd1OTaEjhUo278hBsjlWaGvViTXMry/l12/sHZPegua6KinlK1LKW6SU3wZeE0JclcV1jXpebnyZX236FX/b/7fhXkpcUs0nwPHy0kTJ5lDlUXHip/3IvEI2GtdSYVzhOM2J5lwnmd/a08Ha9w7ypw8Op32ug8cc/Pzvu/Gn0KS1v/245lEkU6IYBSklTV39cYXwIsllsrm5u5+SAiOllsGhLSEE/3H2TJq6nPz+nYNZX0euiWsUhBBWIcQdQoj7hBCfDXYbf51Ak9nI78IYRg73Bv5AH9z64Ij2FlLNJ8BxTyFRsjkkU6FhalpkXmGkGIXqwmocHgcOT+IpYrlOMq/b1AzAe/uOpX2uJz9q4tev72NDY6S4cWL2dcQ3Cu19rkGCdt39HhxuX0zJ7GjkMtkcz4tZOauas06o4Wcv7eKbj2/OSTgrVyTyFP5IIFy0DfgS8AZwOXCxlDL5KeSfIg73HaYgr4BWR+uI9RbSySdA4EZpEIaE4aMj9kBdt5Ybe2ReIVPDddJFdTUn6lXIdZK5p9/NqzvasRYY2dtup713IK3z7T0auLE/vzV5hZn97XaKzUbGWYcaw8mVQ5PNTV1KHTW5sthcJZtbepxMKIu+NiEED169mJvPnsHfNrfw+V+/O+rnPSgSGYWpUso1Usr/Aa4EZgPnSik3Z39po5vDvYc5vf505lfPH7HeQjr5BAh0xlZbqhMahVZHK0aDUdPg+si8QqaG66RLjUWbUch1kvnZLUdw+/x893MnAvDe/vS8hX3BENCL21uTrsVXSeZo/1aTqwJP3I3HjvcqJFOOGs68+uwnm1WPQrzQVl6woe2xLy/D6fZxyW/fY+27BzM6hGo4SGQUQncyKaUPaJZSpvco8inA6/fS3NdMQ0kDNyy4YcR6C+nkExR1RXWajEJtYS0GoS2FFZ5XOGI/oinslG20egq5TjI/uamFE2pLuPzkiZQVmnhvX2fK53J5fRzq6mdGTTHH7G7WH0wuhBStHFUR1VNIonEtnHkTsp9stjk92F1eTfmOpVMrefGm0zljZjU/fG4HX/rDRroc7qytLdsk+itdIIToDb76gPnqvRAit8Lmo4hWRyte6WWSdRLLxy8fsd5COvkEhZYGtjZHW0zNo2iE5xWy1biWLFqNQi6TzPva+9jS1MNlJ9djMAiWT6vkvX3HUn5SbTwW0C360ulTKMzPS0oq2u7y0mobiFp5BFBkNlJTYh7UwNbU1U9ZoYmSAm09CopcJJuT9WLKi/J58OrF3Pn52byz9xhf+kN0GfjRQFyjIKXMk1Jag68SKaUx7L013rGfZlSSucHagBBiRHoL6eYTFHVFdRx1HMUvY4cakpWpUHmFd5vfpWuga9iTzBDQeio2FSesQMplkvnJj1rIMwguOikwoHDF9CpabQMJZyLHYm+wpHXehDLOPnEcL25v01xyeTA0gjN2X+uUCLXUROGZWGhJNv/4uR388pU9SZ87fG0Qf0RoJEII1qyYwi3nzmLT4Z6U/x2Gm7Er9TeMHO4LGoWSBoAR6S2km09Q1BbV4va76RqIHmrw+r2097cn9bSv8gpvt7wNxFZWzTXVhdVxPYVcJpl9fslTHzezcmZ1aGLZimlVALy3P7UQ0t6jdgwioFt04fw6evo9/EPjufbHqTxSTKkqGtTApmWOQizmTShla3P0kS4vbW/l9+8e5JH3G1MqrYXo3cxa+dz8wP/X59McyjNc6EYhCxzuPYzFaKHKEvgjHYneQibyCXB8xkGsCWwd/R34pT/pp/0ltUvw+gOJxJHgKUDiCWy5TDK/u+8YR3tdXHpyfWjbpMpCJpRZeG9vasnmfe12JlYUUmDK4zMzqykxG3lui7Yb2/4OO3kGQUNl7Jv85KoiOh1uegc8+P2BRG4y5ajhzKsv5cAxx5Bkc6fdxXef2k6ByUB3v4e97Ym77aPR3O2k2Dy0R0EL48ssnDypnOdSqOAaCehGIQsc6j1EQ0nDoCqMkeYtZCKfAMdv2LHyCmp7ssnicA9mJOQUIFCBFM8o5DLJvO6jZkotJladWBPaJoRgxfRK3j/QmdKEsL3tfcwI5gQKTHmcM3scL3/ShtubOIS0v8NOQ0UhZmNezH1CyeZjDo7ZXbi9/pSexCF6sllKyfee3k7fgJf7rgyMel1/MDWvSUlmp1r19rl5dexq6wtVc40mcm4UhBCzhBCbw169QoibhRB3CiFawrZfkOu1ZYqmviYarA2Dto0kbyFT+QRIPIHtiCPwpKmlmzkclVcQiJgzGHJNTWENHc6OmPmTXCWZewc8vPxJG6sXjB9yE14xvQqb08MnR5JLwnp9fg4eczC95rj48YUL6ugd8PLO3sSd3Pva7XHzCXBcLfXgMcfxyqM0wkcwONn87NZWXtjWxs3nzGDViTWMLy1g/YHkm/AgODc6Ro+CFi6YV4cQqfV7DDe5GV8UhpRyN3ASgBAiD2gBngKuBX4Z1FkatahyVDXAJZxwb+HiaRdjykveNc0EmconAJSZyyjIK4hZlqq2J3tjF0Jw6vhT+bj942H7PUVSXViN1++le6A7as9FrCTzExubmFVbwvz6soys4/mtrbi8/kGhI8VylVfY15nU9Q519ePxyZCnAHDa9GpKLSae29rKqhNjT73z+vw0HuvnzFk1MfeBQHhLiIBRUAVSyZajKiKTze19A3z/6e0smFjG9adPRQjB0qmVvLO3Ayll0k/8zd39nDK5PKW1AdSWFrBkUgXPbzvCTWen9pAgpeQ3b+yj1Ra9C2DehFKuOKUh6mfpMNzho1XAfinl0MG8o5TwctRIwr2Fh7Y/NAyrC5CpfAIEfqZ4ZamJhuvE4/ZTbuehzw7f7ykSNYEtWgVSrCTzgMfHd57axjce+1hTGEYL6z5qvN1u0AAAIABJREFUZnpNMQvqh3Z5V5eYmTWuhH8k2cSmOplnjDtuFPKNBs6dM45XdhyNOjVN0dztxO3zxyxHVRSY8hhfaqHxmCOUyFUDbFJBJZullHznr9txun38/PIFoVGZS6dUcMzuDg3+0YrN6aFvwJt0U10kn5tfx56jdvYc1S5UGM7WZhv3/H0Pz245wsuftA15bWnOTknucBuFK4DHwr7/uhBiqxBirRAidTM9jISXo0Zj+fjlnD/lfO7fcn/U0ZO5IFP5BEVtUW3MRHM6U9NK8ktGTOURDJ7VHMn6tvVRk8w7W3vx+CSNnf38eX36zz4HjznYeKibSxfVx3z6XT69kg0Hu+LeyCNRCquR1UOfmz8eu8vLW3tih5C0VB4pJlcVcrCzn6YuJ1XFZiz5sXMQiVDJ5j99cIhXdx7llnNnMT3MMC2dGvDmks0rRJPMToXz59UiBCknnF/Y3orRIHjn1rPY+P+dM+T1ky/MS2t9sRg2oyCEyCcwze2J4Kb7gWkEQkutwM9jHHe9EGKjEGJjR4f28Yi5Qql7qnLUSIQQ/ODUHzCxZCK3vX0bnc7UO1BTIZP5BEVcT2GENJ9lglhSF8ecx7jjnTuYbJ08ZEbB1uDT3Ow6K796bS82Z3pFBn/d1IxBwCULJ8Tc57TpVbi8fjYd7tZ83r3tdiaUWQZNTANYPq2S8kJT3BvbcaOQePbW5MoiDnbYA+WoKYaOFCrZ/INnPmHxpHKuXTF4bPzkykJqSsxJ5xXSKUcNp6akgKVTKnh+65GkGwqllLy0vY3l06so1TiAKFMMp6dwPrBJSnkUQEp5VErpk1L6gQeBU6IdJKV8QEq5WEq5uLq6OofL1UZTX9OgctRoFJmK+PkZP6fX3csd79wRt/Er02Qyn6CoK6rjmPNY1KoqLcN1RgtVhYF/03Cj4PP7uOOdO+hz9/HzlT8fEibb0txDVbGZey5fgM3p4Tdv7Ev5+n6/5K+bWjhtRjW1pbG9vFOmVJBnEEmppu49ah8UOlKY8gycN7eO13YexemO7nnsb3dQVZxPWWF+wutMqSqid8DLJ0d6U04yK1SyOd9o4J7LF5BnGOw5qbzC+oOdSd2UU9Vkisbn5o9nf4eD3UmGkHa09nKos5/z5+b+gWo4jcKVhIWOhBDhd45LgO05X1EGiFaOGo1ZFbO4/ZTbeb/1fX6/LXdD7DKZT1DUFtUikUOG0KjhOtkapZlrTAYTFQUVg4zCg9se5IPWD/jO0u8ws3zmkGO2NttYUF/K7PFWLltUz8PvNYbUQZPB7vJy57Of0NLj5NJFsb0EgJICEydNLNOsg+TzS/Z32JkeI/zz+fl19Lt9vL4rejnu/g47UzWEjuB4BZLN6Un/SdxawOoF4/mvS+aFRn5GsnRKBUd7XRzq1P47b+52UpjEiNB4nD+3FoOA57YkF0J6aXsbBgGfnR07wZ8thsUoBGc8nwP8NWzz3UKIbUKIrcCZwH8Mx9rSJVo5aiwunXEpF0y5gN9s/k1K+YW/7P4Lq/+2moM27YM+Mp1PgONlqZEVSEoye6yEjyCQbFZGYUPrBu7fcj8XTr2QS6ZfMmRfu8vL/g57qAroW5+dhcEAd7+8O6lrvrbzKJ/9xVv88YNDXHPqJD43L7HntWJaJVube+gdSByuau7ux+X1R/UUIBCbryrO5/ltxxvZ/H7JvnY7f/u4hd1tfZryCcCgm3eqjWvh3HvlQr6waGgVlmLZ1AogubxCS08/E8pS71EIp6rYzKnTKnl+W2tS3soL21pZOqWSyuLczOQIZ1iMgpTSIaWslFLawrZ9UUo5T0o5X0q5Wko56gp8w9VRtSCE4Punfp+Gkoak8wsun4vfbP4NB20Hue7l6zQZhg/bPsx4PgFiN7CNlFGamaS6sJoOZwfHnMe47Z3baChp4HvLvhf1BrKt2YaUMH9iIMxRW1rA9adP5dktR/hYQ7y/vXeAr/15E9f9YSPFBUae/Opy/vOiuaHqmngsn16FX8IHGmQqVINVeI9COHkGwflz63htZzs/fHYH//S795l358uc/Yu3uPnxzXj8flbO0hbKnVheiIrypBs+0sK06mKqivOTyiukqskUi8/NG8/BYw52tGrTEN17tI/9HQ4umDc8D1PDXX00pohXjhqLIlMR95xxT9L5hWf2P0PXQBffWfodfNKX0DA8secJrv/79Uy2TubymZdrXp8WQlIXEeGjkTI1LZPUFNZw1HE0bh5BobR5FoT1C3zljGlUFZu56/mdMZ8c/X7JYxsOs+oXb/FKsKrmuRtP5+RJ2gvyFjaUYTHladIu2hsyCrGf9i9ZNAGX18+jGw7h9fu57OR6/vuy+bx08+lsv/Nczp2j7QaWbzSEYvWZvPHGQgjBKVMqkpIBT3ZudCLOm1tLnkForkJ6YVsbQqD5d5ppdKOQQRKVo8YiPL/w8CcPJ9zf5/fx8PaHmVs5lytmXcFDn30opmHw+r38dMNP+eH7P2TZ+GX86YI/hWSgM4XFaKHMXEarffB/+mSG64wWaiw1dLu64+YRFFubbdSXW6goOp6ALTIb+dZnZ7LxUDcvfzI43OZwefnj+42c88u3uOOv25g7vpSXb/4MXztzOvnG5P5UzcY8lkyp0JRs3nvUzjirOa7Oz6KGcj787tlsv/Nc/nrDCv7zorlcvngiJ9RaNXku4UyuKkKIgEZQLlg6pZKWHqemXE7fgCcj+Y5wKoryWT6tkue3agshvbi9lcWTyqmxZi7Emwy6UcggicpR43HpjEs5a+JZ3L/5/iE310heb3qdw32HuXbutQghmF4+Paph6HX38vXXvs6fd/6ZL87+IveddR8l+dFDBOkSrSw12eE6owFlUGPlEcLZ0twzyEtQXH5yPTPHFfPTF3fh9vpp6urnrud3sOwnr/G9pz+h2Gzk3isX8uiXl4YSs6lw2vRK9rbbOZpgROe+9j5mxAgdhVNdYk7aAETj9OlVnDq1MmlDlypLQ3mFxN5CS09mehQiuXB+HYe7+tneEj+EdPCYg11tfZw3d/i867Hz1zoC0FKOGgshBLedchsAd394d8z9pJSs3baWhpKGQVIakYbhneZ3+NcX/pX1reu589Q7uXXJreQZUm8USkRtUS1t/YOffJMdrjMaOGPiGVw397qYeQRFp91Fc7eT+VG6jo15Bu644EQaO/u5+DfvccZ/v8Ha9xo5Y2Y16/59OX/72gpWLxifdqJTSV7E626WUrK33R43dJRpvvyZqTz65WU5u97MmhLKCk2sP5A4lNbclbly1HDOnVOL0SB4blt81dkXtwcerM4bhlJUhW4UMojWctRYjC8ez5fnf5lXD7/Key3vRd1n49GNbO/czjVzrhlykw83DDe8dgPdA9088NkHuHTmpSmtJxlqC2tpsw82Cul0M49UqixV3HzyzQllO7YGNXli6Q+tnFnNWSfU0Gpz8tUzpvHubWdy378s4uRJ5RmbRz27zkp5oYk3dsVu8jxiG6Df7cupUcg1BoPglMna8gqZalyLpKwwn9NmVPHcllZc3tid5i9ua2PBxLK0xPjSRTcKGSSZctRYrJmzhoaSBn6y4Se4fUPnvK7dvpaKggpWT1sd9fjp5dNZe+5aLpl+CY9e8GjGK41iUVdcR5+nD7s7kLT0+D2097ePOaOgla1NNoQISDFEQwjBg1cv5sPvns2t551AXWnmbwIGg+DC+eN56ZM2umPMDN4bbKqaMYaNAgTKag939dNqc8bdr7nbSYHJQGVR4ka8ZLn61Em09Di59cmtUXMLTV39bGuxccEwegmgG4WMkWw5aizy8/K5Y+kdHOo9xB8++cOgz3Z37ebdlne56sSr4vYZTCubxg9X/JCJ1olprSUZlAqqKkNNdbjOWGFrcw/TqospNscWIs4ziIzE6OPxL0sbcHv9rNvUHPVzVY46Y1x2ck0jhaVTgnmFBKWpLT3OjPUoRHLWCeO45dxZPL35CD//+9BRoS9tD/ztnD+M+QTQjULGaLUnX44ai9MmnMaqhlU8sPWBQUnnP3zyByxGC/8865/TvkamUbkDlVcYi+WoWpFSsqXZFjWfkGtOrLOysKGMRzccjvp0uq/dTmVR/qAKqbHIiXVWSgqMCZvYMl2OGskNK6dxxZKJ3PfGPh7/8PCgz17c3sqc8da40+tygW4UMkRoLnOa4SPFrUtuBY4nnVvtrbx48EUunXEppebhv9lEojwFZQzU12SH64wFWm0DHLO7olYeDQf/ckoDBzocUWPquU4yDxd5Kq+QwFNo7u7Pav+EEIIfXTyXz8ys5jtPbeftoPpsq83JpsM9w6J1FIluFDJEOuWo0RhfPJ7r518fSjr/cecfAbh69tUZOX+mqS6sxiAMofBRqsN1xgKqaW0keAoAF84fT0mBkUfXD34ylVKy92hfTHmLscbSqRUcOOagPUaJrsPlpbvfk1VPAQIig7+9ahEzx5Vww583sbO1l5dV6EiDhEm20Y1ChkinHDUW18y5hknWSdy1/i6e3PMk5085f8SWeBoNRqot1SFjkM5wndHOlmYbRoPgxDrrcC8FAEt+HpcuqufF7a102l2h7R19LnoHvJp6FMYCS6eo+QrRvYVs9ShEo9hsZO2axRSbjVz7vx/yl43NzBxXrFlDKpvoRiFDpFuOGo38vHxuP+V2mvqacHqdrJm7JmPnzgZ1RXXHjcIYLEcFcHsDs4zjsbW5hxPqSigwZa8vJFn+ZWkDHp/kyY+OJ5yVvMVYrzxSzBlvpdgcO6+QrXLUWNSVWvjfa5dgd3nZ0do77AlmhW4UMsThvsMZyyeEc9qE07h0xqWsnrY6rqTCSKCuqG5QTmEsGYXGYw5++uIulv/0Nc68503e3Ru9Iczvl2xttmVsHnOmmDmuhCWTy3lsw2H8/kDCWZWjfhpyChBoGjx5Ujn/2N8Z+h2Ec3yOQu56BE6ss3L/vy7ixDorX0ggiZ4rdKOQAbx+Ly19LRnLJ0Ry5/I7ueu0u7Jy7kxSW1RLm6MNv/QHjMIIDXVpxe3189zWI1z1+w9Yec+bPPjOARY1lFNfbuE/n/0Ej2+oeOH/396Zx0VZ7X/8fdhVEBdQXAFXRHHFPTUrTdPSrDT3FrP11u22XLtLt/q13W6L7WVmmqWWLVZW5pKWu4Ii7uICuICCCqiAAnN+f5xncIAZGGCGGeC8Xy9eM/Os5wzPPN/nfL7LSTx7iQu5+VbnT3Y1k/q2JvFsNpuNzN7DaRep7+dFcEDVl2d2FaO7NuNo2iWe/2lviWisk+dz8PHyIKhe1X4fg9oH8+tjgwhtXPGSJo5EGwUH4Mhw1OpMSL0Q8kx5JGUlcSnvktuMFK7kmxj7/kaWbEsue2ODtQfP0P+VNTyyaCeJ6dk8MawDG/9+HXOmRfPs6EgSzlzkiy0l51w2T78Z1cK9Rgqg4t8b1PUudDir2dYCnBKT767c3qsl9w0KZ8HmJN5ek1Bk3YnzObRsUAcPj9rzfVjDdmaNxm4cHY5aXTGX0N55ZmeRz67mt72pxB3PIO3CZW7v1bLMhDEpJS/9vJ/6dbx5fXw3BrcPLjLV47DIpgxqH8Sbqw5xS7fmRSZC2XUiAz9vDzq4YUSPn7dyOC/YlEjahcscPnORYS6Y2cuVCCH4x02dOJ+dx+zVCTSs68P0AWGA8ilUhZPZ3dEjBQfg6HDU6op5ZGA2Cu4yUvh8cyI+Xh6czMhh9X7rU0pasj4hncNnLvKX69oxtGMTq3P//ufmSHKuFPB6sczU+BOZdG4e6PRM5YoysU9r8k2SOX8e4eylK7XGn2CJEIJXx0UxLLIp//lxLz/EnQScn7hWXXDZlSuESDSm34wTQsQYyxoJIVYJIRKMV/tnFXEhyReSHR6OWh0pPlJwB6OwPyWL7Ynn+duwDjQP9GPBpsQy95m/KZEgf19GdbXd/nZNApjWP4wl25PZYxS/yy8wsfeUe2Qy26JdE3/6hjdivvE91PTyFrbw8vTg3Yk96BveiCe+3sWvu1M4e+lKlTqZ3RVXP84MlVJ2l1JGG59nAWuklO2BNcZntyc5K9nh4ajVkQa+DfDz9CMpK8mpk+tczi/gkBE5Uxafb07Cz9uDO3u3Ykr/UDYfPcvBVNv7Hku/xO8HzjC5b2t8vUoPKX3shvY0qutT6LQ8dPoiuXkmt8lktoU5PBVqTziqNfy8PZk7PZqIZgE8vGgHULWRR+6Kq41CccYA5ipwC4CxLmyL3TgrHLW6IYQoHC04a3KdjOwrTPpkK8Pf+rPMWcUyc/JYtvMkY7q1oEFdH+7s3RofLw8WbE60uc+CTYl4ewom9yv7/xlYx5unbuzI9sTz/BSf4naZzLYY0SWERvV8qOfjSbNA18zu5S4E+Hkz/+4+hBmRP64sWe0uuNIoSGClECJWCDHTWNZUSmmuAJcKlPCCCSFmCiFihBAxaWm268RXFc4OR61umI1Cc//mDj/2qYwc7vhoM7tPZNIkwJd/L9tTam36b2JPkJNXwNT+KiqsUT0fxnRrzvc7TpKZnVdi+wu5eXwTe4LRXZvTJMC+m+Ud0a3o0qI+L/+8ny1HzxLg51V4g3FXfL08eerGjkwfEFbrR7cAQf6+LJzRl0eva0e3Vu49yqsKXGkUrpFS9gRGAg8LIQZbrpQqiLhEhomUco6UMlpKGR0cHFxFTYWLVy6SeTmzxHIdjlqUwpGCgyOPDp2+wLgPNpGamcuCe/rwvzu6cTT9EnP+OGp1e5NJsnBzIr1CG9KlxdUn9+kDwsjJK2Bp7PES+3wTe4KLl/O5y4hGsQdPD8FzN3cmNSuXZXGn6NoysFqENE7s05qnR0S4uhluQ4sGdfjb8I54u2mAQFXism9ASnnSeD0DfA/0AU4LIZoBGK9lh4pUETNXzWTIV0OYuXIm3xz6hvO55wEdjlocs3PZkU7m7YnnuP3DTZik5OsH+tO/bWOGdAhmVFQz3lt7mOSzJSdkX384ncSz2UzrX9RYd2kRSHRoQxZuSSqS1WoySRZsSqRn6wblflqMDmvEmO5qZORumczlxmSC3JIPP5rag0uMghCinhAiwPweGA7sAX4EphubTQd+cEX7ipOUlcTu9N1Eh0Rz8uJJnt/8PEO/HsrMlTP5NuFbQIejmjGPEBxlFH7bm8qUuVsJCvDlu4cGFCky9+/RkXh5CJ79cU+J7NSFm1UEkbV6MtMHhJF0Npt1h64+c6w9eIbEs9ncPTC8Qu18ZmQnOjevX/3j/uO+hDc7a8NQi3FV8lpT4HtDz/QCFkkpVwghtgNfCyHuBZKA8S5qXxFWJq4E4MWBL9K0blMOnDvAyqSVrExcSfKFZAJ8Amp9OKqZVgGtirxWhsXbkvnn97vp2rIB8+7qXWIimJBAPx4f1oEXf97Pb3tTGWEYgOPnsllz4AyPDG2Hj1fJ554RXUJoWt+X+ZuSuC5C3cTnb0okpL5fhSdMDwn04+dHB1VoX7cicQNcuQCpeyBsoKtbo3EBLjEKUsqjQDcry88C11d9i0rnt8Tf6BbcrfApuFPjTnRq3IlHezzKwfMHkVLWSoedySRL6OfRTaOZO3yu1bmhf9ubSmSz+rRqVHaC0IfrjvDfFQcY2jGY9yf3pK6P9Uv1rgFhfLvjJM//tI9B7YOp5+vFF1uT8BCCSX2tj968PT2Y3DeUN1cd4kjaRUwmyfqEdJ66sRpoylKCM6+1lF3qNXW3Ngq1FDf/BbiepKwkDp4/yPDQ4SXWCSGIaBRBp8adXNAy15FXYOKZ73bT/9U1pFvU5wf1nfRt1reEkdyeeI77F8Yy8u31/LjrlM1jSyl59dcD/HfFAW7p1pw506JtGgRQSUgvju1CSmYus1cfIjevgK+2H2d4ZFOaBdoOL5zYpzU+nh4s3JzE/E0q4/nO3lU3p3WFSN4Kr7SE9ISyt60IV7Ih/aB6n7rbOefQuD269lEZmKWj4WEljUJt5NLlfB5etIN1B9MQAj5ad4R/jY4sc7+3VycQ5O9DaON6PLp4JxsS0njuls5FbvgFJsm/f9jDoq3JTO7bmhfGdClRYsIavUIbMrFPK+ZtTERKyMjOKwxDtUVwgMpY/ib2BAUmydjuRWsYuSXb58KVi3BoBQS1d/zxz+wDaQJPX0iNd/zxNdUCPVIog+LSUW3mzIVcJszZzPqEdF4ZF8W4Hi1ZuCWJ0zamNzQTm3SODYfTmTm4DV/N7McjQ9uxNPYEN7+7gf0pWYCqZPrYkp0s2prMQ9e25cWx9hkEM0/fGEFgHW/mbjhG+yb+9G9Tdjb19AFhXLycT05eAXcNqJiDucrIzYT9P6n3R/9wzjnM0lHEKEg7APlXnHMejVujjUIplCYd1TaOpF1k3AebOHLmEp9M68XEPq157Pr2FJgkH6w9XOq+s1cn0LieD1P6heLl6cGTN3bky3v7kpWbz5j3NzJ/4zFmLoxheXwKz4yM4OkREeX20TSs58OskSrufpqdSVndWzWgT1gjBrUPIrK5e0ydaZO9yyA/B1r0gqRNzrlhp+wCvwbKKBRcgfRDZe+jqXFo+agUtHSkiEk8x4zPY/DyEHx1f7/CWPzWjetyR3RLFm87zswhba2WCNiRfJ71CenMGhlRRCoa0C6IXx8bxJNLd/HcT/sQAl4ZF8XEPhUP7b2jV0tCG9UlOqyR3fssnNGnwuerUuIWQVBHGPhX+HoqnIyF0P6OPUdqPDTrCiFdjc+7IaSLY8+hcXv0SKEUart0lJF9hXkbjjFp7lYa1vXhuwcHlkjOeuQ6pW2/97t15+fbqxNoVM+Hqf1KavxB/r7Mm96bV8dFMW9670oZBDCc3G0al0t28vXyLLPwncs5ewSOb4HukyDsGkDAMQdLSAV5cHovNOsGjduCVx3tbK6laKNgg8TMxFopHV3JN7FybyoPLIylz0treGH5Pnq0asC3Dw6gdeOSoaQtGtRhYp9WLI05USKzOO54Bn8cSmPGoHDq+VoflHp4CO7s05qhEU2c0p8aQdwiEB7QdQLUbaSe5o/96dhzpB1UklGz7uDhCU07u7+zWUpYehfs/NLVLalRaPnIBiuTap50ZDJJvo45ztlLV/D18sDX2xM/49XHU7D5yFl+3HWK89l5BPn7MLV/KON6tiCyWf1SNfqHh7ZjyfbjvL0mgTfGX00/eXv1IRrU9WZa/7Aq6F0NxVQAuxZD2+uhvpGdHT4EtnwIVy6Bj4OK75mdzGbpKCQK9n7v/LyIypASp9q4fzk06QQterq6RTUCbRRssDJxZY2Tjt5cdYj3SnEK+3p5MCyyKbf1bMmg9kF2zx7WpL4fU/uFMm/jMR68ti3tmviz63gGaw+m8dSNHfG3MUrQ2MGxPyHrJAx/8eqyNkNg0zuQvBna3eCY86TsAu96SjoCZRRiP4PME9DATfM39n4PHl7g30SNGO7/E+pU89pTboD+tVrBLB093ftpVzelVLYnnuOHuJPMGtmpzBvvz/EpvLf2MBOiW/HC2M7k5pm4nF/AZeM1N89E68Z1qe/nXaG2PHBtWxZtS+btNQm8O7EH76xJILCOd4mCdJpyErcI/AKh401Xl7XuDx7eKjTVUUYhNV45lT0M/4qls9kdjYKUKiKrzbUw5O/w2Uj48REYv9B9RzbVBO1TsIJZOhoWOszFLbGNlJL/W76PL7YkM/XTrVbnBzCz71QWTy7dRc/WDXhhbGd8vTwJrONNkwA/WjWqS7smAXRpEVhhgwDKaXzXgDCWx5/im9gTrDlwhhnXhBNQiWO6Jam7YcU/IC/H+ecy5yZ0uR28LeZ38KkHrfo4ztlsMql+NbOoPNM0EhAVdzZnnYKV/1Y3bmeQEgcZSRA5Vn0XNzynvqttc5xzvlqENgpWcIR0ZDJJYpPOs/XoWWKTzhF3PIM9JzM5kJpFYvqlElU9y0vc8QziT2QyKqoZe09mMfGTLSVKTgCcu3SF+z6PIbCONx9N6eXUSJuZg9vg7+PFU9/sor6fF9MHhjntXC4hZRcsuBm2vO+8BDJLzLkJ3SeXXBc+GFLiIftc5c9z7qjKlDaPDkAZnsbtyu9szjoFvzwFb3dTEte6VyvfPmuYpaOIUepz/0egw0j47Z9wcodzzllZTsXBmhfUKMeN0fJRMRwhHUkp+eey3SzeVnIiFzOD2gfx0tgoqxE99vD55iT8fb347+1dmZB0npkLY5jw8Wa+mNG3sOZPXoGJh7/cQdrFyyy9vz9N6jt36sUGdX24d1A4s1cncO81bSo18nA7UnbB52PAx185eBPXQ8cRzj2nOTfBmgM1fAise0VVNY28pXLnSYlTr82K1agMiYKTMfYdI+sUbHgLYuerUhndJ4OntyrNkX1ORU05CkvpyHxcIWDsB/DxYPf0L5hMSt5K3Q2RY0p+126EHikUwxHS0dz1x1i87Tj3DAxn0Yy+fH5PHz67qzdzpvbiw8k9mTUygp3JGQyf/Qcf/3GE/AJTuY6fduEyP8encHuvlvj7ejG4QzCf39OX01mXueOjzYWhoS/9vJ/NR8/y6rioKptmcObgNjwzMoL7Brt52YjyYGkQpv8ELXurm7EzscxNsKaRt+ilHMOOkJBS48HTB4KLzcQWEgUZyZCTYXtfKWH1c2pkEDMPuk2Ev+yAW96BLrepbZI3V76NllhKR5bUbQS3z1OO+R8fca8n8t1Lr0px+5e7ti1loI2CgZSSfWf38dORnyolHa3ad5qXf93PqKhm/GtUJwa0C2Jwh2CGRjRheOcQRkY144EhbVn1t8EMah/MK78e4Jb3NrLreCk/vGJ8tT2ZKwUmplgkhPUJb8Si+/py8XI+d3y8iTdXHWL+pkRmXBPOuJ4tK9SXilDXx4v7h7QttbJptaK4QWgUrhLIUuNLv1lWFsvcBGt4+UDoAMfIWCm7VEinV9H5KgrlpNN7bO97aqcaIXS86aoxaGhcl817quJ6SZsq30ZLiktHllj6F7bPdex5K0peLvz+fyoHpPXf84iqAAAZ00lEQVQAOKCNgttiNgSzY2cz6vtRTFg+geMXjjMlckqFjrf3VCaPLdlJ1xaBvH5Ht1Ln6m0WWIdPpkXz0ZRepF+8zK0fbOSFn/Zx6XJ+qefILzDxxZZkBrUPol0T/yLrurZswFcz+2OS8M6aBAa1DyqsB6SpANYMAiijIE2QvMU557WWm2CN8MFwNkFJNxVFStVPa3JGSJR6Lc3ZHLdI3fhvfvuqMTDj7adGNI4cKViTjorT/xEIGwQbZrvHaGHbHMg8DsNegE43q2q0Z4+UvZ+UELugcv/fClArjcKhxO08NfcmRn4zggnLJzB/73xa+rfkuf7PsXb8WkaElV8rPpOVy4wFyqH7ybRo6vjY59Ad0SWE1U8MYVLf1szbeIwHvoilwGT7Ql657zSpWbk2E8I6hgSw9P7+3DconHcn9rA710BTjNN7rRsEUPKRp4/yKzgDc25C90mlb9dmiHqtzGgh8wTknC/qZDYT0BTqNbFtFPIvK1mk02jb+n1of+VgvXyx4m20xJZ0ZIkQ0HU8ZJ0ofZRTFWSfg/WvQ7th6v9lHt3YM1o4vg1+etR5znobVPkdQwjRSgixVgixTwixVwjxmLH8OSHESSFEnPF3U1nHqijJp4+zyiuZOhfzCg3BnOFzuK3DbTT0a1ju4+VcKWDG5zFk5uTx6fTe5Xbo1vfz5sWxUbx8axTrE9J573fbCWYLNiXSsmEdriulLERYUD3+OSqSBnV9bG6jKYNVz4LwLGkQALzrONevsO0TqNOoaG6CNZpGqe0qU/LCnMncrLv19SFRtiOQDv4KuRmlG6/QASAL4MT2irfRktKkI0va36heD61wzHkryoY3ITdLSVqgRlMhUfb5FWI/U697v1cTIFURrniMzAeekFJGAv2Ah4UQ5lla3pJSdjf+fnFWA27oO44lafV48Vg6rbyH2mUI8gpMnM7KJSP7Crl5BZiMp3mTSfK3r+PYfTKTd+7sUakSzBP7tGJcjxbMXnOIjYfTS6w/kJrF1mPnmNovtFxF3zTl5HwSHF4Dve8taRDMOMuvkHYIDv4MfWYWzU2whocHhA9SzuaKyiSp8cp30bSz9fUhUXDGxtwKcYsgoBm0GWr7+C37qOM7wq9gj3RkJqCp8mkcdKFRyEiGrR8ro2lZbTbiZmUkL6Ta3jfnvDIGIVFwOQsO/Oz89hpUuVGQUqZIKXcY7y8A+4EWVd2ONgPvprNHEnOXLiM3r6DUbTOz8xj1znr6vryG7i+sIuLfK2jzj1/o8K9f6fr8Sn7dk8o/b+rEDZFNK9UmIQQv3tqFdsH+PLZkZ4nJaz7fnISvlwfjo90ww7QmsdPIiu0x1fY2zvIrbHpHVSjtc59924cPUVKTPRq1NVJ2QVAH8LERGh0SBaa8q9N0mrmQCodXQ7c7r2ZBW8OvvpKmHOFXsEc6sqTjSFVi/OKZyp+7Ivz+kjKIQ/9RdHmn0YCEg6U89+76CvJz4Zb3ILA1xFVd0T+XCs5CiDCgB7DVWPSIECJeCDFPCGH18V0IMVMIESOEiElLS6vwuX26j8fk4U3frJWlThKTV2DioUWxHEu/xDMjI3h2dCRPj+jIY9e35+6BYdzeqyX/N7YL917jmBDMuj5efDilJ5cuF/CXRTsLw1Uzc/L4fsdJxnRvTsN6WhZyGgV5sGOh0oBLK+9QHr9C2kH7RhRZKRD/FfSYAvWC7GtvuOFXOLbOvu2LkxJfesy8ZbkLS+K/VrJQtzL8HqAkpBPblQ+iMtgrHZnpMAKQcOi3yp23IqTsUv/Lfg9CYLHovyaR0DDctoQkpcr3aN4TmneH7hPh6Drl/6kCXGYUhBD+wLfAX6WUWcCHQFugO5ACvGFtPynlHClltJQyOjg4uOINqNsIj4ibmOC7ibl/HORg6gVr5+LZH/ay8fBZXhnXlfuHtOWea8J56Np2PD6sA8+M7MRzt3Rmar/Qcs8UVhrtmgTwyrgotiWe4/WVavarpTHHyckr0BVHK0rqHqXtlsWh3+BiKvS6q/Tt7PUrZJ+DOdfCwluhoPTIMrZ+CKZ86P9w2e0007gt1G9RMWfzxTS4cMq6k9ny+MXnVpBSSUcte0Nwh7LPEzpAPfWeiit/Gy3Paa90ZCYkCuq3dI1fYdV/lPN94F9LrhNCjRaO/alKmRTn+FZI2w/Rd6vP3SYCEnYtcWqTzbjEKAghvFEG4Usp5XcAUsrTUsoCKaUJ+ARw/pRY3SfjX5DJjT67mfVdfImon083HGPxNjVn8O29qi7WH2BsjxZM6tuaj/44wqp9p1m4JYleoQ3p0iKwSttRI8g8qW7M380se9vYzyCgObS3o2S6PX6FHZ9DXjac2qGkIVvkZkLMZ0oaseXHsIYQarSQuF5lzZaHVLOTuZSRQuHcChZG4dROddMqKzrKTGtjhrikjeVrnyXllY5AfTcdboQja1WuQFVxeA0cXQuDn7YdlRVxs5LlDq0suS52PvgEQOdx6nOjcAi9RhniKgixdUX0kQA+BfZLKd+0WG4ZkH0r4PxYsrbXQ70mPNU0lp3JGXyxJalw1ep9p3npl/2M7BLCk8M7Or0p1nh2dCSdm9fn4S93kHQ2m+kDwlzSjmrPlg+MH+CvpUsJZgdzz6ngaUfyXVl+hYJ8lUAVNkiVNlj3CpzZb33b2PnKoTjwsbLPW5w2Q5RjMqWcT+KFcyhElb6dOQLJfEMy5yaYb1plUS9IleuojF+hvNKRmQ4jIO+S8zPQzeTlwopZ0CBUBSrYomVv8G8KB34qutzsYO46Hnwt8pC6T4JzR1SYqpNxxUhhIDAVuK5Y+OlrQojdQoh4YCjwuNNb4ukF3SbQ7MwfjGrrzWsrDnAqI4d9p7J4dMlOujQP5M3x3UtNQnMmft6efDC5J75eHgQH+DKic82Z26HKyDmvbriRY5VD9denbT812uNgtqQsv8LBX1TSUt/74aY3wDcAlj1UUkbKvwybP1DSSHMboaGlET5E3aTnjYDFk5Teb49UlrILGoaVXSMoJEqNZDKP25ebYI3Q/pC8VSXmlZeKSEdmwgeDd131QFAVrHsZ0g/B6LfAy9f2dh4eKuQ4YXXR69HsYC4uX0aOUWVNqsDh7Iroow1SSiGl7GoZfiqlnCqljDKW3yKlTKmSBnWbhDDl82Lb/ZgkPLl0FzMWbCewjjdzp9ufhOYsQhvX45sHB7Dg7j74eFXy3yWlcla5Q5ZnVREzT1UAHfwk3PQ/OJ8IG98uuZ29DmZLyvIrbP1YRY50GAn+wTDqDesyUvzXyo9RkVECqKznGavUk+mpnfDdffC/dlcNhK3EsZT40v0JZiydzfbkJlgjdCBczlRJgeXl4C9KOup8a/n39fZTIbMHV1T8ur+Ubt++x7fDpneh53Rod33Z23carUYxR9epz5YO5mbF/i++/sowVEHOgk53bRoJzXvQ8NBSnhjegU1HzpKRk8fc6dE0dXJVUXvpGBJQ8fwHKeH0PhUe934feKszrH3ZsQ10V/JyYctHaiKakCj1pNn5VpVQdD6x6LZmB7PZuWcvtvwKqXsgaQP0mXFViup8a0kZyWRSRiIkqvR4/7Jo1g1GvAKP74V7VkL0PVcNxOwoWP8mXLYIpsjNhPPH7KvWaTm3gj25CdYw+xXKKyFln4Plj6tEvajx5dvXTMcRFc9ujlukDOyyh0of5eTlwg8PKX+U5Sx5pRE2GHwDr0pIxR3Mxek+qUpyFrRRAFXmN3U3d7W5wD0Dw/l4ai86N6/mDt0z+68agg/7q1R7/6ZKalj/hrphVFekLHqDs0X8Erh0pugT+PCXVKbyimeKbmt2MLcrZ3VcW36FbR+rqJ3iUlShjPSgkpEOrVByw8C/OmbGMA8PaN0XRr6qDMRdv6j6Q2ueh9ldrxoHs+PYViazJea5FQ6vti83wRoNWqlRU3mdzStmQfZZVRa7eME+e6lodnPcImUMGobCrkXwwyO2DYNZNrrlHZWbYQ9ePtBhuBp9FeSXdDAXJ3QgNHB+zoI2CqBK/Hr64BW/mGdvjmRQ+0qEuroDf74OH/S7aghGvQFPHIS7lsP4BWpO22UPVT5uvCqRUiUirfw3vN0VXmtbuvPQVKCG8s17KEevmcAWMORpJUmYs10LHczT7HMwW2LNr5B9Tsk23SaU1MALZaSdaoSwcbb6oZcnqsZePDwgbCBM+QZmrClqHMz1dIrLFLYIiVK5BvbmJlgjtD8kbbZfxjnwi4r1H/Sk/e20RkBT1ffyZDebDUKbIfDgZrj2GduGobyykSURo5TRO7TCuoPZEg8P9d07OWdBGwVQP9yOI2H319bT+asTf/5PlemNGn/VEPSeoQwBQJ2GqqLlmX3wx2uubWtZFDcEn1ynIomCOqonzyWTIT3B+r4Hfoazh9UoofgTeL+HlNN5xd/VsL/QwVyB6rjW/Ao7PlfOwj42QmDNMtLvLyrJoP9fym+MykvL6KLGIXG9ym/wt11DqwjmCCV7cxOsETpAjdzsyb7OPgfL/6pko0FPVOx8lnQYYX92s6VBuHOxyva+dpZ1w2CWjeq3sF82sqTdMBUksPxx6w7m4nS7E2fnLGijYKb7ZGWxE6zEDVcX/vyfutF0vRNu/cj2D77DjeqJY8Nb7jt1Yc55+GJcUUMw5n14MkHd3KZ8q0IUv7wDLp0tuq+U6gm8YTh0sjIrmZfPVafz+tfL72AujqVfwTIM1VY9IVAyUp0GqqBdDyvTbToLs3GYuQ7uXGT/fuYn9fI6mC1pPUC9JttRB8kRspEl9mY3WzMIZqwZhorIRpb4+kPbocpYtuhV9oioCnIWtFEwY+QsEFeOH4o7YWkQxn5QtuY74hVlNH542LaMlH4Y5o+GNyPh5ychcWPFQgrLS/phmHsDHFuvfABmQ9BjylU5pmEYTFysas0vmVQ0rC9pk3oqHPAX299Dm2vVE/uf/6uYg9kSS79CYRjqA6Xv4x8Md/8K05Ypzb6qad6jfOGvbYbCuLn2h+taI6g91A0quzieo2QjS+zJbi7NIJixNAyLxl+VjdpeV/G2RYxWr2WNEsw4OWdBGwUzRs4CCb+p9P/qRHkNAqinVFsykqkANr0HHw1UT8DNuimJZf5N8GYn5xqIo+tg7nVKPpj2Awx4xHZseqs+akR0fIsybuYnp41vq5tPWU+1w19Ssd8VcTBbYulXMIehdhxZ9n7BHd16rt4ieHhC1zvUvMsVRQjDr1CKUXC0bGR5blvZzeeT4MdHyzYIZsyG4fDqistGlnQdD7e8q36/9uDknIUaMmeig+g2SVn+T4epp6jgTuqH26QTNGpTuR9EcXLOq5LEaftVwbQz+5UG3ryHcoTae7OoiEEwYykjRYxSE8SnH1Ya6fGtKr7+5tkQEKJi3RN+U0lEOxfC9k9UdI2nlaG9l6+6IQ/4i/2F3UDJLr88rfT+SUvUaKAsuoxToZVrXlD/o863qnYO/ZfS+0sjsAXc+aXqQ2U0fbNfIf5rJQMM+7/yR+fUFkIHqqkyM0+q7784v/5dyUaTv3GMbGRJx5EQ86ny/7S/QRmD9W+om6vwUJVpb3i+dINg5tpZauQT3KlispElXr4qyMFefP1V5dUGrSt3XhsIWY0TmaKjo2VMTIxjDxrzmdId0/ariwbj+/HwVppf57FKp7Z2QVvD2s0/7QBcPH11G+96yvg0DIMja1QMecRo28YhJ0OFse35Fg6vqphBsDzWB/3Ar4HStn9/UV2kI19T8wNbC5M0G4gTMdZ1zawTqgKkd131QyvLOBTkKw15+ycqfPC2ueX7oUmpJmrf+YXyPWQeV+GY5c1+rQxrX4Y//qsM5d/2Ve25qxOn4mDOELjtU4i6XS27kq2u4z3fwr4fYMgsGPpM6cepCHm58Fq4qmvlF3jVGPScDtc8bv9vugYghIiVUkZbXaeNQilcyVZOpLQDSmY5vOZqAkyrviqMMHKMupiyz6mbftp+wwgcsH3zD46AJhHqKaNJhNI6PQwlLydDSRBb3i9qHBqEKr167zI48ruq5RPYSjnIhzxduSfTQyth0R3qveXooDKkHVSy1J5vixqHOg2Vg9dsHNMOqPDMs4fV3LrDXqhYXwrylGP62J/Q90EVp1+VHPsTFtysdOGbrWRMaxSmAng1FCJvUSPVvd+rh7C8bCX5Rd2hrgFHjxLMLJ6kJjHy9FH/q4F/rVXGwIw2Co4kPUHdmPctu2og6jZWQ14z9tz8y6K4cfDwvmoIIscomaRFL8ckPIExBWRDlbPhwDLgRYyDl696qi+wcGwHtlLfU9cJSrOuDDkZsOVDFQpar3HljlVeCvLhj1dVJnH95lV77urGF7cpPR6UIeh0sxqBh17j/NDclF1qFNvrrlppDMxoo+As0g/Dvu/Vk29Qh4rd/MsiJ0PpoLmZSrZypCGoStIOKsPj5at8NMGdVLy7b4CrW6apahI3Kr9CxxFVYwg0JdBGQaPRaDSFlGYUdEiqRqPRaArRRkGj0Wg0hWijoNFoNJpCtFHQaDQaTSFuZxSEECOEEAeFEIeFELNc3R6NRqOpTbiVURBCeALvAyOBSGCiECLSta3SaDSa2oNbGQWgD3BYSnlUSnkFWAKMcXGbNBqNptbgbkahBXDc4vMJY1khQoiZQogYIURMWlo1q2aq0Wg0bk61SyWUUs4B5gAIIdKEEEmVOFwQkO6QhlUvdL9rF7rftQt7+h1qa4W7GYWTgOX0Vy2NZVaRUlZqMmUhRIytrL6ajO537UL3u3ZR2X67m3y0HWgvhAgXQvgAdwI/urhNGo1GU2twq5GClDJfCPEI8BvgCcyTUu51cbM0Go2m1uBWRgFASvkL8EsVnW5OFZ3H3dD9rl3oftcuKtXval0lVaPRaDSOxd18ChqNRqNxIdooaDQajaaQWmkUanJ9JSHEPCHEGSHEHotljYQQq4QQCcZrQ2O5EEK8Y3wP8UKInq5reeUQQrQSQqwVQuwTQuwVQjxmLK/RfRdC+Akhtgkhdhn9ft5YHi6E2Gr07ysjmg8hhK/x+bCxPsyV7a8sQghPIcROIcRy43ON77cQIlEIsVsIESeEiDGWOew6r3VGoRbUV5oPjCi2bBawRkrZHlhjfAb1HbQ3/mYCH1ZRG51BPvCElDIS6Ac8bPxfa3rfLwPXSSm7Ad2BEUKIfsB/gbeklO2A88C9xvb3AueN5W8Z21VnHgP2W3yuLf0eKqXsbpGP4LjrXEpZq/6A/sBvFp+fAZ5xdbsc3McwYI/F54NAM+N9M+Cg8f5jYKK17ar7H/ADMKw29R2oC+wA+qIyWr2M5YXXPCrcu7/x3svYTri67RXsb0vjBngdsBwQtaTfiUBQsWUOu85r3UgBO+or1UCaSilTjPepQFPjfY38LgxpoAewlVrQd0NCiQPOAKuAI0CGlDLf2MSyb4X9NtZnAo2rtsUOYzbwNGAyPjemdvRbAiuFELFCiJnGModd526Xp6BxLlJKKYSosXHIQgh/4Fvgr1LKLCFE4bqa2ncpZQHQXQjRAPgeiHBxk5yOEGI0cEZKGSuEuNbV7alirpFSnhRCNAFWCSEOWK6s7HVeG0cK5aqvVEM4LYRoBmC8njGW16jvQgjhjTIIX0opvzMW14q+A0gpM4C1KNmkgRDC/NBn2bfCfhvrA4GzVdxURzAQuEUIkYgqsX8d8DY1v99IKU8ar2dQDwF9cOB1XhuNQm2sr/QjMN14Px2lt5uXTzMiFPoBmRZD0GqFUEOCT4H9Uso3LVbV6L4LIYKNEQJCiDooP8p+lHG43diseL/N38ftwO/SEJurE1LKZ6SULaWUYajf8O9SysnU8H4LIeoJIQLM74HhwB4ceZ272mniIkfNTcAhlPb6T1e3x8F9WwykAHko/fBelHa6BkgAVgONjG0FKhLrCLAbiHZ1+yvR72tQWms8EGf83VTT+w50BXYa/d4DPGssbwNsAw4DSwFfY7mf8fmwsb6Nq/vggO/gWmB5bei30b9dxt9e8/3Lkde5LnOh0Wg0mkJqo3yk0Wg0Ghtoo6DRaDSaQrRR0Gg0Gk0h2ihoNBqNphBtFDQajUZTiDYKGg0ghCgwqk6a/0qtniuEeEAIMc0B500UQgRV9jgajaPQIakaDSCEuCil9HfBeRNRsePpVX1ujcYaeqSg0ZSC8ST/mlG/fpsQop2x/DkhxJPG+0eFmschXgixxFjWSAixzFi2RQjR1VjeWAixUqi5D+aikovM55pinCNOCPGxUejOUwgxXwixx2jD4y74GjS1CG0UNBpFnWLy0QSLdZlSyijgPVRlzuLMAnpIKbsCDxjLngd2Gsv+AXxuLP8PsEFK2RlVt6Y1gBCiEzABGCil7A4UAJNRcyS0kFJ2MdrwmQP7rNGUQFdJ1WgUOcbN2BqLLV7fsrI+HvhSCLEMWGYsuwa4DUBK+bsxQqgPDAbGGct/FkKcN7a/HugFbDcqu9ZBFTX7CWgjhHgX+BlYWfEuajRlo0cKGk3ZSBvvzYxC1ZfpibqpV+RhSwALpJpNq7uUsqOU8jkp5XmgG7AONQqZW4FjazR2o42CRlM2EyxeN1uuEEJ4AK2klGuBv6NKMvsD61HyD0a9/3QpZRbwJzDJWD4SaGgcag1wu1Ej3+yTCDUikzyklN8C/0IZHo3GaWj5SKNR1DFmLzOzQkppDkttKISIR82HPLHYfp7AF0KIQNTT/jtSygwhxHPAPGO/bK6WNX4eWCyE2AtsApIBpJT7hBD/Qs2o5YGqcvswkAN8ZiwDNX2sRuM0dEiqRlMKOmRUU9vQ8pFGo9FoCtEjBY1Go9EUokcKGo1GoylEGwWNRqPRFKKNgkaj0WgK0UZBo9FoNIVoo6DRaDSaQv4frd+4lnoF/ykAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(aggr_ep_rewards['ep'], aggr_ep_rewards['avg'], label = 'avg')\n",
    "plt.plot(aggr_ep_rewards['ep'], aggr_ep_rewards['min'], label = 'min')\n",
    "plt.plot(aggr_ep_rewards['ep'], aggr_ep_rewards['max'], label = 'max')\n",
    "plt.legend(loc='upper left')\n",
    "plt.xlabel('Episodes')\n",
    "plt.ylabel('Rewards')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. Rendering Test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "done = False\n",
    "state = env.reset()\n",
    "while not done:\n",
    "    action = np.argmax(q_table[get_discrete_state(state)])\n",
    "    next_state, _, done, _ = env.step(action)\n",
    "    state = next_state\n",
    "    env.render()\n",
    "\n",
    "env.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python(spinningup)",
   "language": "python",
   "name": "spinningup"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
